我有这样的字符串:
Some text, with punctuation sign!
我使用str.split("regex")
通过标点符号将其拆分。然后我在分割后处理接收到的数组中的每个元素(切换字符)。
我想将所有标点符号添加回他们的位置。所以结果应该是这样的:
Smoe txet, wtih pinctuatuon sgin!
这样做的最佳方法是什么?
答案 0 :(得分:2)
如何用一条细线完成整个事情?
str = str.replaceAll("(?<=\\b\\w)(.)(.)", "$2$1");
一些测试代码:
String str = "Some text, with punctuation sign!";
System.out.println(str.replaceAll("(?<=\\b\\w)(.)(.)", "$2$1"));
输出:
Smoe txet, wtih pnuctuation sgin!
答案 1 :(得分:1)
我会逐字逐字地阅读字符串。
如果字符是标点符号,则将其附加到StringBuilder
如果字符不是标点符号,请继续读取字符,直到找到标点符号,然后处理该字词并将其附加到StringBuilder。 然后跳到下一个标点字符。
这打印,而不是附加到StringBuilder,但你明白了:
String sentence = "This is a test, message!";
for (int i = 0; i<sentence.length(); i++) {
if (Character.isLetter(sentence.charAt(i))) {
String tmp = "" +sentence.charAt(i);
while (Character.isLetter(sentence.charAt(i+1)) && i<sentence.length()) {
i++;
tmp += sentence.charAt(i);
}
System.out.print(switchChars(tmp));
} else {
System.out.print(sentence.charAt(i));
}
}
System.out.println();
答案 2 :(得分:1)
由于您没有添加或删除字符,因此您也可以使用String.toCharArray()
:
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length; ) {
while (i < cs.length() && !Character.isLetter(cs[i])) ++i;
int start = i;
while (i < cs.length() && Character.isLetter(cs[i])) ++i;
process(cs, start, i);
}
String result = new String(cs);
其中process(char[], int startInclusive, int endExclusive)
是一种方法,它使索引之间的数组中的字母混杂。
答案 3 :(得分:0)
您可以使用:
String[] parts = str.split(",");
// processing parts
String str2 = String.join(",", parts);