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

Java,按标点符号拆分字符串,处理字符串,将标点符号添加回字符串,java,string,Java,String,我有这样的字符串: Some text, with punctuation sign! Smoe txet, wtih pinctuatuon sgin! 我使用str.split(“regex”)通过标点符号将其拆分。然后,在分割之后,我处理接收数组中的每个元素(开关字符) 我想把所有的标点符号添加回它们的位置。所以结果应该是这样的: Some text, with punctuation sign! Smoe txet, wtih pinctuatuon sgin! 做这件事的最佳方

我有这样的字符串:

Some text, with punctuation sign!
Smoe txet, wtih pinctuatuon sgin!
我使用
str.split(“regex”)
通过标点符号将其拆分。然后,在分割之后,我处理接收数组中的每个元素(开关字符)

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

Some text, with punctuation sign!
Smoe txet, wtih pinctuatuon sgin!

做这件事的最佳方法是什么?

我会逐字通读字符串

  • 如果字符是标点符号,请将其附加到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();
String-sense=“这是一个测试,消息!”;

对于(inti=0;i,我会逐字读取字符串

  • 如果字符是标点符号,请将其附加到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();
String-sense=“这是一个测试,消息!”;

对于(int i=0;i,因为您没有添加或删除字符,所以您可以只使用
String.tocharray()

char[]cs=str.toCharArray();
对于(int i=0;i

其中,
process(char[],int startInclusive,int endExclusive)
是一种将数组中的字母在索引之间混淆的方法。

由于您不添加或删除字符,您最好只使用
String.tocharray()

char[]cs=str.toCharArray();
对于(int i=0;i
其中
process(char[],int startInclusive,int endExclusive)
是一种将数组中的字母在索引之间混淆的方法。

您可以使用:

String[] parts = str.split(","); 
// processing parts
String str2 = String.join(",", parts); 
您可以使用:

String[] parts = str.split(","); 
// processing parts
String str2 = String.join(",", parts); 

把整件事放在一条细线上做怎么样

str = str.replaceAll("(?<=\\b\\w)(.)(.)", "$2$1");

把整件事放在一条细线上做怎么样

str = str.replaceAll("(?<=\\b\\w)(.)(.)", "$2$1");

执行此操作时,
str.split(“regex”)
按1个标点符号拆分,或者可能有多个标点符号?如果按一个符号拆分,请说
str.split(“,”)
那么你就知道你得到的数组只包含单词,经过处理后,你可以在每个数组元素后面放回你的符号……但我认为情况并非如此……)是的,@rich是对的,拆分的方法在这里不起作用。你必须逐个字符遍历它……@ACV。它可能有很多,例如“,:!?”执行此操作时,
str.split(“regex”)
按1个标点符号拆分,或者可能有多个标点符号?如果按一个符号拆分,请说
str.split(“,”)
那么你就知道你得到的数组只包含单词,经过处理后,你可以在每个数组元素后面放回你的符号……但我认为情况并非如此……)是的,@rich是对的,使用split的方法在这里不起作用。你必须一个接一个地遍历它…@ACV。可能有很多,例如“,:!?”谢谢。我将尝试这种方法。在最后一个字符的迭代之后,我们将收到索引输出
while(Character.isleter(句子.charAt(i+1))&&iThanks。我将尝试这种方法。在最后一个字符的迭代之后,我们将收到索引…
while(Character.isleter(句子.charAt(i+1))&&iI不知道为什么,但我喜欢这个正则表达式:D.@Tom LOL!我明白你的意思了:)我不知道为什么,但我喜欢这个正则表达式:D.@tomlol!我明白你的意思:)