Regex 字母和数字之间的连字符

Regex 字母和数字之间的连字符,regex,string,java-6,replaceall,Regex,String,Java 6,Replaceall,我需要一个函数来在字母结束和数字开始的位置或数字结束和字母开始的位置放置连字符,例如,1234GRR到1234-GRR 我正在使用Java6 我有这个,但这只是在每个地方放一个连字符 public static String addHyphen(String word) { StringBuilder longer = new StringBuilder(word.substring(0,1)); for (int i = 1; i < word.length(); i++

我需要一个函数来在字母结束和数字开始的位置或数字结束和字母开始的位置放置连字符,例如,1234GRR到1234-GRR

我正在使用Java6

我有这个,但这只是在每个地方放一个连字符

public static String addHyphen(String word) {
    StringBuilder longer = new StringBuilder(word.substring(0,1));
    for (int i = 1; i < word.length(); i++) {
      longer.append("-" + word.charAt(i));
    }
    return longer.toString();
}

有人能帮我吗?谢谢

最简单的解决方案是使用正则表达式,当然前提是您知道正则表达式。要定位两个字符之间的位置,我们使用?最简单的解决方案是使用正则表达式,当然假设您知道正则表达式。要定位两个字符之间的位置,请使用?尝试以下操作:

public static String addHyphen(String word) {
          boolean words=false;
          boolean number=false;
          String end=new String();
            for (int i = 0; i < word.length(); i++) {
                if (word.substring(i,i+1).matches("[1-9+]")&number==false){
                    number=true;
                    words=false;
                    end=end+"-"+word.substring(i,i+1);
                }else if (word.substring(i,i+1).matches("[a-zA-Z]")&words==false){
                   number=false;
                   words=true;
                    end=end+"-"+word.substring(i,i+1);
                }else {
                    end=end+word.substring(i,i+1); 
                }
            }
            return end.substring(1);
        }
试试这个:

public static String addHyphen(String word) {
          boolean words=false;
          boolean number=false;
          String end=new String();
            for (int i = 0; i < word.length(); i++) {
                if (word.substring(i,i+1).matches("[1-9+]")&number==false){
                    number=true;
                    words=false;
                    end=end+"-"+word.substring(i,i+1);
                }else if (word.substring(i,i+1).matches("[a-zA-Z]")&words==false){
                   number=false;
                   words=true;
                    end=end+"-"+word.substring(i,i+1);
                }else {
                    end=end+word.substring(i,i+1); 
                }
            }
            return end.substring(1);
        }

您可以使用regex参数执行此操作,如下所示:

public class Main {
    public static void main(String[] args) {
        // Test
        String[] testStrs = { "1234GRR", "GRR1234", "Hello", "Hello1234World", "1234GRR1234GRR" };
        for (String s : testStrs) {
            System.out.println(addHyphen(s));
        }
    }

    public static String addHyphen(String word) {
        String str = null;
        if (word != null) {
            str = word.replaceAll("([0-9]+)([A-Za-z]+)", "$1-$2");
            str = str.replaceAll("([A-Za-z]+)([0-9]+)", "$1-$2");
        }
        return str;
    }
}
输出:


注意:$1和$2分别指的是第一个和第二个。

您可以使用正则表达式参数进行操作,如下所示:

public class Main {
    public static void main(String[] args) {
        // Test
        String[] testStrs = { "1234GRR", "GRR1234", "Hello", "Hello1234World", "1234GRR1234GRR" };
        for (String s : testStrs) {
            System.out.println(addHyphen(s));
        }
    }

    public static String addHyphen(String word) {
        String str = null;
        if (word != null) {
            str = word.replaceAll("([0-9]+)([A-Za-z]+)", "$1-$2");
            str = str.replaceAll("([A-Za-z]+)([0-9]+)", "$1-$2");
        }
        return str;
    }
}
输出:


注:$1和$2分别指第一个和第二个。

这里的社区通常希望看到您以前的研究结果,以及您自己在研究后尝试解决方案失败的地方。这允许我们避免提供您已经尝试过的想法。问题是,我不知道如何告诉函数在下一个位置更改为数字或字母时放置连字符。提示您,您的代码中没有任何条件逻辑。如果连字符从未对if语句进行过任何检查,那么它如何知道将连字符放在何处呢?这里的社区通常希望看到您以前的研究结果,以及您自己在该研究之后尝试的解决方案失败的地方。这允许我们避免提供您已经尝试过的想法。问题是,我不知道如何告诉函数在下一个位置更改为数字或字母时放置连字符。提示您,您的代码中没有任何条件逻辑。如果连字符从不使用if语句进行任何检查,那么它怎么知道将连字符放在哪里呢?你不应该在addHyphen中检查单词的null值以避免NullPointerException吗?@ArvindKumarAvinash不。好吧,我不能决定是否允许使用null值。问题代码不允许这样做,所以我将使用这个非常常见的决定。您是否应该在addHyphen中检查word是否为null以避免NullPointerException?@ArvindKumarAvinash否。好吧,我不能决定是否允许使用null值。问题代码不允许这样做,所以我将使用这个非常常见的决定。