为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2021-10-27 10:36:13
假设我有一个字符串内容如下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: 4Input:  FTX+AAA+++201707141009UTC'  FTX+CCC+++201707141009UTC?:??'  PISCO US LTS;?:V.D??'    FTX+ZZZ+++201707141009UTC'Expected Output:  Number of segments: 3基本上,当分隔符 ' 带有问号时,我想将其视为同一行。行分隔符是 '如何标记并获取 Java 中的段数???
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

您可以在正则表达式中使用负回顾:


String input = "FTX+AAA+++201707141009UTC'\n"

    + "  FTX+BBB+++201707141009UTC'\n"

    + "  FTX+CCC+++201707141009UTC?:??'\n"

    + "  PISCO US LTS;?:V.D??'  \n"

    + "  SOUZA?:GB?:GB'\n"

    + "  FTX+ZZZ+++201707141009UTC'";


String[] tokens = input.split("(?<!\\?)'\\s*");

System.out.println(tokens.length);

4


但是,在第二个示例中,我希望有两个部分,而不是三个...


查看完整回答
反对 回复 2021-10-27
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我想他/她想要的是:


String a = "FTX+AAA+++201707141009UTC'"

        + "FTX+BBB+++201707141009UTC'"

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

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

        + "SOUZA?:GB?:GB'"

        + "FTX+ZZZ+++201707141009UTC'";

String result[] = a.split("'");

List<String> stringList = new ArrayList<String>(Arrays.asList(result));

for (int i = 0; i < stringList.size(); i++) {

    if (!stringList.get(i).startsWith("FTX") && i != 0) {

        stringList.set(i-1, stringList.get(i-1) + stringList.get(i));

        stringList.remove(i);

        i--;

    }

}

for (int j = 0; j < stringList.size(); j++) {

    System.out.println(stringList.get(j));

}

FTX+AAA+++201707141009UTC

FTX+BBB+++201707141009UTC

FTX+CCC+++201707141009UTC?:??PISCO US LTS;?:VD?? SOUZA?:GB?:GB

FTX+ZZZ+++201707141009UTC


查看完整回答
反对 回复 2021-10-27
?
SMILET

TA贡献1796条经验 获得超4个赞

上面的另一种选择 - 但再次证明您发布的第二个示例可能是错误的,因为第三行以 a 结尾?',根据您的定义不应该是中断。


public void test() {

    test("FTX+AAA+++201707141009UTC'" +

            "FTX+BBB+++201707141009UTC'" +

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

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

            "SOUZA?:GB?:GB'" +

            "FTX+ZZZ+++201707141009UTC'");

    test("FTX+AAA+++201707141009UTC'" +

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

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

            "FTX+ZZZ+++201707141009UTC'");

}


private void test(String s) {

    String[] split = s.split("(?<!\\?)'");

    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]


查看完整回答
反对 回复 2021-10-27
  • 3 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信