如何在单个拆分中标记带有和不带有分隔符的字符串

假设我有一个字符串内容如下


Input:

  FTX+AAA+++201707141009UTC'

  FTX+BBB+++201707141009UTC'

  FTX+CCC+++201707141009UTC?:??'

  PISCO US LTS;?:V.D??'  

  SOUZA?:GB?:GB'

  FTX+ZZZ+++201707141009UTC'

Expected Output:

  Number of segments: 4


Input:

  FTX+AAA+++201707141009UTC'

  FTX+CCC+++201707141009UTC?:??'

  PISCO US LTS;?:V.D??'  

  FTX+ZZZ+++201707141009UTC'

Expected Output:

  Number of segments: 3

基本上,当分隔符 ' 带有问号时,我想将其视为同一行。行分隔符是 '


如何标记并获取 Java 中的段数???


喵喔喔
浏览 133回答 3
3回答

慕娘9325324

您可以在正则表达式中使用负回顾:String input = "FTX+AAA+++201707141009UTC'\n"&nbsp; &nbsp; + "&nbsp; FTX+BBB+++201707141009UTC'\n"&nbsp; &nbsp; + "&nbsp; FTX+CCC+++201707141009UTC?:??'\n"&nbsp; &nbsp; + "&nbsp; PISCO US LTS;?:V.D??'&nbsp; \n"&nbsp; &nbsp; + "&nbsp; SOUZA?:GB?:GB'\n"&nbsp; &nbsp; + "&nbsp; FTX+ZZZ+++201707141009UTC'";String[] tokens = input.split("(?<!\\?)'\\s*");System.out.println(tokens.length);4但是,在第二个示例中,我希望有两个部分,而不是三个...

蛊毒传说

我想他/她想要的是:String a = "FTX+AAA+++201707141009UTC'"&nbsp; &nbsp; &nbsp; &nbsp; + "FTX+BBB+++201707141009UTC'"&nbsp; &nbsp; &nbsp; &nbsp; + "FTX+CCC+++201707141009UTC?:??'"&nbsp; &nbsp; &nbsp; &nbsp; + "PISCO US LTS;?:V.D??'&nbsp; "&nbsp; &nbsp; &nbsp; &nbsp; + "SOUZA?:GB?:GB'"&nbsp; &nbsp; &nbsp; &nbsp; + "FTX+ZZZ+++201707141009UTC'";String result[] = a.split("'");List<String> stringList = new ArrayList<String>(Arrays.asList(result));for (int i = 0; i < stringList.size(); i++) {&nbsp; &nbsp; if (!stringList.get(i).startsWith("FTX") && i != 0) {&nbsp; &nbsp; &nbsp; &nbsp; stringList.set(i-1, stringList.get(i-1) + stringList.get(i));&nbsp; &nbsp; &nbsp; &nbsp; stringList.remove(i);&nbsp; &nbsp; &nbsp; &nbsp; i--;&nbsp; &nbsp; }}for (int j = 0; j < stringList.size(); j++) {&nbsp; &nbsp; System.out.println(stringList.get(j));}FTX+AAA+++201707141009UTCFTX+BBB+++201707141009UTCFTX+CCC+++201707141009UTC?:??PISCO US LTS;?:VD?? SOUZA?:GB?:GBFTX+ZZZ+++201707141009UTC

SMILET

上面的另一种选择 - 但再次证明您发布的第二个示例可能是错误的,因为第三行以 a 结尾?',根据您的定义不应该是中断。public void test() {&nbsp; &nbsp; test("FTX+AAA+++201707141009UTC'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "FTX+BBB+++201707141009UTC'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "FTX+CCC+++201707141009UTC?:??'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "PISCO US LTS;?:V.D??'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "SOUZA?:GB?:GB'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "FTX+ZZZ+++201707141009UTC'");&nbsp; &nbsp; test("FTX+AAA+++201707141009UTC'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "FTX+CCC+++201707141009UTC?:??'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "PISCO US LTS;?:V.D??'" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "FTX+ZZZ+++201707141009UTC'");}private void test(String s) {&nbsp; &nbsp; String[] split = s.split("(?<!\\?)'");&nbsp; &nbsp; System.out.println(split.length+"->"+Arrays.toString(split));}印刷4->[FTX+AAA+++201707141009UTC, FTX+BBB+++201707141009UTC, FTX+CCC+++201707141009UTC?:??'PISCO US LTS;?:VD??'SOUZA?:GB?:GB, FTX+ZZZ+++201707141009UTC]2->[FTX+AAA+++201707141009UTC, FTX+CCC+++201707141009UTC?:??'PISCO US LTS;?:VD??'FTX+ZZZ+++201707141009UTC]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java