Java расщепляет строки? - PullRequest
2 голосов
/ 17 мая 2010

Я пытаюсь разбить строку, когда возникает "", например, тест предложения abc. Затем переместите первую букву в каждом слове от первого до последнего. Я получил перемещение письма для работы с исходной строкой, используя

String text = JOptionPane.showInputDialog(null,"Skriv in en normal text:");
char firstLetter = text.charAt(0);
normal = text.substring(1,text.length()+0) + firstLetter;

Итак, мой вопрос: как мне разбить строку, а затем начать перемещать буквы в каждой части вырезанной строки?

Ответы [ 4 ]

5 голосов
/ 17 мая 2010

Сохраните ваши разделенные строки в массиве, затем зациклите массив и замените каждую из них:

String[] pieces = originalString.split(" ");
for (int i = 0; i < pieces.length; i++)
    pieces[i] = pieces[i].subString(1) + pieces[i].charAt(0);

Кстати, это только начало - оно не будет правильно обрабатывать случаи, когда есть более одного пробела, однобуквенные слова или любые другие особые случаи (потому что вы не сказали, что хотели делать). Вам придется справиться с ними самостоятельно.

1 голос
/ 17 мая 2010

Вам не нужно split -tranform-join для этого;replaceAll может сделать это за один шаг.

    String text = "Skriv in en normal text:";
    text = text.replaceAll("(\\s*)(\\w)(\\w+)", "$1$3$2");
    System.out.println(text);
    // prints "krivS ni ne ormaln extt:"

По сути, регулярное выражение охватывает 3 группы:

\1 : (\s*) : any optional preceding whitespace
\2 : (\w)  : the head portion of each "word"
\3 : (\w+) : any tail portion of each "word"

Затем, когда строка замены делает это очевидным и понятным, вы переключаетесь \2 и \3 около.


Таким образом, должно быть ясно, что replaceAll с группой захвата является лучшим, наиболее читаемым решением для этой проблемы, но что это регулярное выражение зависит от спецификации проблемы,Обратите внимание, что, например, вышеприведенное регулярное выражение преобразует text: в extt: (т. Е. Двоеточие сохраняется там, где оно есть).

Следующий вариант разбивает пробельные символы \s и переупорядочивает голову / хвостлюбая последовательность непробельных символов \S.Это должно быть идентично вашему текущему решению split(" ") -transform-join:

    String text = "bob: !@#$ +-";
    text = text.replaceAll("(\\s*)(\\S)(\\S+)", "$1$3$2");
    System.out.println(text);
    // prints "ob:b @#$! -+"

Этот вариант переключает любую последовательность символов \w+ слова, окруженную границей слова \b.Если это то, что вам нужно, то это самое простое и удобочитаемое решение для работы.

    String text = "abc:def!ghi,jkl mno";
    text = text.replaceAll("\\b(\\w)(\\w+)\\b", "$2$1");
    System.out.println(text);
    // prints "bca:efd!hig,klj nom"

См. Также

0 голосов
/ 17 мая 2010

Если производительность является проблемой, рассмотрите возможность использования StringTokenizer вместо split, StringTokenizer намного быстрее.

0 голосов
/ 17 мая 2010

Используйте String.split , чтобы разбить строку на части. Затем запустите свой код для каждой части. Вы можете снова соединить строку, используя StringBuilder и цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...