我正在尝试在发生“”时分割字符串,例如句子测试abc。 然后将每个单词中的第一个字母从头到尾移动。 我使用
移动了要在原始字符串上工作的字母String text = JOptionPane.showInputDialog(null,"Skriv in en normal text:");
char firstLetter = text.charAt(0);
normal = text.substring(1,text.length()+0) + firstLetter;
所以我的问题是如何分割字符串然后开始在剪切字符串的每个部分中移动字母?
答案 0 :(得分:5)
将拆分字符串存储在数组中,然后遍历数组并替换每个数组:
String[] pieces = originalString.split(" ");
for (int i = 0; i < pieces.length; i++)
pieces[i] = pieces[i].subString(1) + pieces[i].charAt(0);
顺便说一句,这只会让你开始 - 它将无法正确处理有多个空格,单字母单词或任何其他特殊情况的情况(因为你没有说出你想要的东西)做)。你必须自己处理这些。
答案 1 :(得分:1)
您没有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(" ")
- 转换加入解决方案相同:
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"
答案 2 :(得分:0)
使用String.split将字符串分开。然后,在每个部分上运行代码。您可以使用StringBuilder和循环将字符串重新组合在一起。
答案 3 :(得分:0)
如果性能有问题,请考虑使用StringTokenizer
代替split
,StringTokenizer要快得多。