如何将字符串中的所有数字移动到字符串的开头?

Cha*_*kya 13 java regex string

对于以下字符串:

String str="asd14sd67fgh007";
Run Code Online (Sandbox Code Playgroud)

我想输出像:

1467007asdsdfgh
Run Code Online (Sandbox Code Playgroud)

我知道如何分割字符串,但我不知道如何得到它.对于拆分,我有这个代码:

public static void main(String[] args) {
    String str="asd14sd67fgh007";
    Pattern pattern = Pattern.compile("\\w+([0-9]+)\\w+([0-9]+)");
    Matcher matcher = pattern.matcher(str);
    for(int i = 0 ; i < matcher.groupCount(); i++) {
        matcher.find();
        System.out.println(matcher.group());
    }
}
Run Code Online (Sandbox Code Playgroud)

The*_*ind 29

2 replaceAll()可以做到(如果你真的想使用正则表达式:P):

public static void main(String[] args) {
        String s= "asd14sd67fgh007";
        String correctedString = s.replaceAll("\\D+", "") + s.replaceAll("\\d+", "");
        System.out.println(correctedString);
}
Run Code Online (Sandbox Code Playgroud)

O/P:

1467007asdsdfgh
Run Code Online (Sandbox Code Playgroud)

注意 :

"\\D+"==>替换所有非数字字符"".(会给你所有数字).

"\\d+"==>替换所有数字""(将为您提供所有非数字字符)

  • @Chanakya - Ywc.但是这个比其他方法要慢:) (4认同)
  • 好吧,我的意思是更像代码将不太清楚,但我想你可以添加这些作为注释并正确命名方法;) (2认同)

Men*_*ena 16

这是一个使用char[]s和StringBuilders 的简单解决方案:

String input = "asd14sd67fgh007";
StringBuilder output = new StringBuilder();
// temporary, for storing alphabetic characters
StringBuilder temp = new StringBuilder();
// iterating input's characters one by one
for (char c: input.toCharArray()) {
    // digits, go to output in their order
    if (Character.isDigit(c)) {
        output.append(c);
    }
    // letters, go to temporary to be appended later
    else if (Character.isAlphabetic(c)){
        temp.append(c);
    }
    // punctuation gets lost
}
// appending temporary alphabetics to digits and printing
System.out.println(output.append(temp));
Run Code Online (Sandbox Code Playgroud)

产量

1467007asdsdfgh
Run Code Online (Sandbox Code Playgroud)


gon*_*nzo 9

你可以做这样的事情.用于StringBuilder在循环遍历所有chars 时跟踪正面和背面.

String str="asd14sd67fgh007";
StringBuilder front = new StringBuilder(str.length());
StringBuilder back = new StringBuilder(str.length());
for (char c : str.toCharArray()){
    if (c>=48 && c<=57){ //If numeric
        front.append(c);
    }else{
        back.append(c);
    }
}
front.append(back.toString());
System.out.println(front.toString());
Run Code Online (Sandbox Code Playgroud)

产量

1467007asdsdfgh
Run Code Online (Sandbox Code Playgroud)