在Java中,如何将连续字母转换为以破折号分隔的数字?

在Java中,如何将连续字母转换为以破折号分隔的数字?,java,Java,我想把字母转换成数字,如果字母是连续的,我想用破折号-。我将保留非字母字符不变,如下所示: Input string: "20 pizzas an!d, 1 Apple a b c" Output string: "20 16-9-26-26-1-19 1-14!4, 1 1-16-16-12-5 1 2 3" 注:a/a=1,b/b=2。。。y/y=25,z/z=26,应该是这样的 String alphabetic = "abcdefghijklmnopqrstuvwxyz"; c

我想把字母转换成数字,如果字母是连续的,我想用破折号-。我将保留非字母字符不变,如下所示:

Input string: "20 pizzas an!d, 1 Apple a b c"

Output string: "20 16-9-26-26-1-19 1-14!4, 1 1-16-16-12-5 1 2 3"
注:a/a=1,b/b=2。。。y/y=25,z/z=26,应该是这样的

 String alphabetic  = "abcdefghijklmnopqrstuvwxyz";
 char[] charArray = input.toCharArray();
 for (int i = 0, charArrayLength = charArray.length; i < charArrayLength; i++) {
        char ch = charArray[i];
        int index = alphabetic.indexOf(Character.toLowerCase(ch));
        if (alphabetic.indexOf(ch) >= 0 || index >= 0) {
            String replace = String.valueOf(index+ 1);
            if (i+1 != charArray.length && alphabetic.contains(String.valueOf(charArray[i+1])))
                replace =replace+"-";
            input = input.replace(ch + "", replace);
        }
    } 

使用java代码并在注释中进行解释:

将输入字符串转换为大写 使用值初始化的哈希映射 迭代字符串并在stringbuilder中追加字符并追加-如果字符不是最后一个字符,或者如果字符由有效的字符-Z进行,则不追加-


这是非常简单和容易的。只需检查你的字符串并检查字母。如果找到,则将其替换为数字,如果前面的字符也是字母,则添加:

public static String convert(String str) {
    StringBuilder buf = new StringBuilder();
    boolean alphabetic = false;

    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);

        if (Character.isAlphabetic(ch)) {
            if (alphabetic)
                buf.append('-');
            buf.append(Character.toLowerCase(ch) - 'a' + 1);
            alphabetic = true;
        } else {
            buf.append(ch);
            alphabetic = false;
        }
    }

    return buf.toString();
}

不确定您是否希望有人为您编写程序?或者仅仅寻求程序逻辑。如果你问的是逻辑,那很简单。循环遍历给定句子中的所有字符,并用等价的数字替换非数字字符。另外在中间加一个破折号,除非前面的字符是空格。我是Java新手,所以我需要你的帮助。我觉得我应该使用正则表达式来获取连续的字母,并使用split方法在它们之间添加破折号,但我不确定这是否是一种正确的方法。@Girish,怎么样!D在d前面有一个感叹号,你不用加大号。如果有人能提供一个算法,我会非常感激。首先,试着用文字描述一个解决方案。编程主要是解决问题。人类主要是用我们从小学习的口头和书面语言来解决问题。使用这个工具,当你有一个好的解决方案时,把它翻译成一种编程语言。这不会检查连续的字母。我只想在相邻字母之间添加破折号请参阅更新的答案@user7755336我认为对于这个简单的任务来说,使用Map是一种开销
public static String convert(String str) {
    StringBuilder buf = new StringBuilder();
    boolean alphabetic = false;

    for (int i = 0; i < str.length(); i++) {
        char ch = str.charAt(i);

        if (Character.isAlphabetic(ch)) {
            if (alphabetic)
                buf.append('-');
            buf.append(Character.toLowerCase(ch) - 'a' + 1);
            alphabetic = true;
        } else {
            buf.append(ch);
            alphabetic = false;
        }
    }

    return buf.toString();
}