Подтвердить что ты не робот

Как перенести все цифры в строку в начало строки?

Для следующей строки:

String str="asd14sd67fgh007";

Мне нужен вывод:

1467007asdsdfgh

Я знаю, как разбить строку, но я не знаю, как это получить. Для split я имею этот код:

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());
    }
}
4b9b3361

Ответ 1

2 replaceAll() может это сделать (если вы действительно хотите использовать регулярное выражение: P):

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

O/P:

1467007asdsdfgh

Примечание:

"\\D+" == > замените все нечисловые символы на "". (будем дайте вам все номера).

"\\D+" == > замените все цифры на "" (будет дайте вам все нечисловые символы)

Ответ 2

Здесь простое решение с использованием char[] и StringBuilder s:

String input = "asd14sd67fgh007";
StringBuilder output = new StringBuilder();
// temporary, for storing alphabetic characters
StringBuilder temp = new StringBuilder();
// iterating input 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));

Выход

1467007asdsdfgh

Ответ 3

Вы можете сделать что-то подобное. Используйте StringBuilder, чтобы отслеживать переднюю и заднюю части при прохождении через все char s.

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());

Выход

1467007asdsdfgh

Ответ 4

Если для регулярного выражения не обязательно использовать, вы можете просто использовать цикл для достижения результата:

    String str = "asd14sd67fgh007";
    String digits = "", characters = "";

    for (int i = 0; i < str.length(); ++i) {
        if (Character.isDigit(str.charAt(i))) {
            digits += str.charAt(i);
        } else {
            characters += str.charAt(i);
        }
    }

    System.out.println("Result is :" + digits + characters);