简体   繁体   中英

Java splitting strings?

I'm trying split a string when ever a " " occurs, for example the sentence test abc. Then move the first letter in each word from first to last. I got the moving the letter to work on the original string using

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

So my question is how would I split the string then start moving the letters around in each part of the cut string?

Store your split strings in an array, then loop over the array and replace each one:

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

By the way, this will just get you started -- it won't correctly handle cases where there's more than one space, single-letter words, or any other special cases (because you didn't say what you wanted to do). You'll have to handle those yourself.

You don't have to split -tranform-join for this; replaceAll can do this in one step.

    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:"

Basically the regex captures 3 groups:

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

Then, as the replacement string makes it obvious and clear, you switch \\2 and \\3 around.


So it should be clear that replaceAll with capturing group is the best, most readable solution for this problem, but what that regex is depends on the problem specification. Note that for example, the above regex transforms text: to extt: (ie the colon is kept where it is).

The following variation splits on whitespaces \\s , and reorders the head/tail of any sequence of non-whitespace characters \\S . This should be identical to your current split(" ") -transform-join solution:

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

This variation do the switch on any word character \\w+ sequence surrounded by word boundary \\b . If this is what you need, then this is the simplest, most readable solution for the job.

    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"

See also

Use String.split to break the string apart. Then, run your code on each part. You can put the string together again using StringBuilder and a loop.

如果性能是一个问题,请考虑使用StringTokenizer而不是split ,StringTokenizer快得多。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM