【问题标题】:How to split string with specific start and end delimiter?如何使用特定的开始和结束分隔符拆分字符串?
【发布时间】:2021-04-23 05:55:38
【问题描述】:

公共类测试{

public static void main(String[] args) {

    String str = "My CID is #encode2#123456789#encode2# I am from India";

    String[] tokens = str.split("#encode2#");

    for (int i = 0; i < tokens.length; i++) {
        // prints the tokens
        System.out.println(tokens[i]);
    }
}

}

输出将是 我的 CID 是 123456789 我来自印度

但我只想要整个字符串中的 123456789,并且我想使用该 123456789 数字进行加密。

我也使用 if(!"#encode2#".equals(text)) 条件但仍然没有得到输出。

如何从#encode2#右侧写出需要Strat的条件并在#encode2#之前结束。

【问题讨论】:

  • 你为什么不忽略tokens数组中的最后一个元素?
  • System.out.println(tokens[0]); ?
  • 字符串未修复。例如,有时用户键入大字符串。我是 Java,我喜欢编码#encode2#147589545#encode2#。我也喜欢学习新的编程。在这种情况下,令牌[0] 将不起作用

标签: java string collections split


【解决方案1】:

使用 String 的 indexOflastIndexOf 方法查找两个 #encode2# 子字符串开始的索引。然后,使用substring 获取这两个索引之间的字符串。

String str = "My CID is #encode2#123456789#encode2# I am from India";
String substring = "#encode2#";
int firstIdx = str.indexOf(substring);
int secondIdx = str.lastIndexOf(substring);
System.out.println(str.substring(firstIdx + substring.length(), secondIdx)); //123456789

【讨论】:

  • 您也可以使用int firstIdx = str.indexOf(substring) + substring.length(), secondIdx = str.indexOf(substring, firstIdx); … str.substring(firstIdx, secondIdx) 搜索下一个出现而不是最后一个出现的语义不同,当出现两次以上时,两次出现时,性能略有不同,具体取决于哪个部分预计将是更大的一个。由 OP 决定哪个更合适。
  • @Holger 谢谢。我写这个假设恰好有两次出现#encode2#
【解决方案2】:
    public String getToken() {

        String str = "My CID is #encode2#123456789#encode2# I am from India";

        int start = str.indexOf("#encode2#") + "#encode2#".length();
        int end = str.lastIndexOf("#encode2#");

        return str.substring(start, end);
    }

注意:此方法仅在您的字符串值中有两次“#encode2#”时才有效。如果您需要多个 Token 实例,则此方法不起作用。

【讨论】:

  • 非常感谢您解决了我的问题。真的很有帮助
  • @Goku 不用担心。如果答案解决了您的问题,请将其标记为正确,以便其他人正在寻找解决方案。
猜你喜欢
  • 2018-11-11
  • 2018-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多