Java,通过标点符号拆分字符串,处理字符串,将标点符号添加回字符串

时间:2016-05-24 21:07:31

标签: java string

我有这样的字符串:

Some text, with punctuation sign!

我使用str.split("regex")通过标点符号将其拆分。然后我在分割后处理接收到的数组中的每个元素(切换字符)。

我想将所有标点符号添加回他们的位置。所以结果应该是这样的:

Smoe txet, wtih pinctuatuon sgin!

这样做的最佳方法是什么?

4 个答案:

答案 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);