【问题标题】:How to Remove string after second last occurrence of special character?如何在倒数第二次出现特殊字符后删除字符串?
【发布时间】:2017-02-11 06:09:18
【问题描述】:

在我的应用程序中,我尝试使用 StringBuilder 制作面包屑

假设这是字符串:

String1>String2>String3>String4>String5>

现在我想删除String5>,我想要这样的字符串:

String1>String2>String3>String4>

我该怎么做?

请帮忙!!

【问题讨论】:

  • 我的问题不同。请仔细阅读.. @mandar
  • public StringBuilder delete(int start,int end) 删除此序列的子字符串中的字符。子字符串从指定的开头开始并延伸到索引 end - 1 处的字符,或者如果不存在这样的字符,则延伸到序列的末尾。如果 start 等于 end,则不进行任何更改。参数:start - The beginning index, inclusive. end - The ending index, exclusive.

标签: java android string stringbuilder


【解决方案1】:

你可以使用正则表达式\\w+>$

\\w+ 平均匹配 [a-zA-Z0-9_]

>$ 匹配 > 字符,其中 $ 表示结尾

Regex Demo Link

    String s  = "String1>String2>String3>String4>String5>";
    String s2 = s.replaceAll("\\w+>$","");
    System.out.println(s2);

输出:

String1>String2>String3>String4>

注意:为了避免_ 使用

    String s2 = s.replaceAll("[a-zA-Z\\d]+>$","");

以防万一你有一些特殊字符的数据,比如

String s = "String1>Stri$#$ng2>String3>Stri#$$#ng4>St$#:/|ring5>";

那么上述解决方案将不起作用,因此您可以使用

    String s2 = s.replaceAll("[^>]+>$","");
    // s2 will be = String1>Stri$#$ng2>String3>Stri#$$#ng4>

Regex Demo Link

[^>]+ : ^ inside [] 用作否定意味着匹配除 > 之外的所有字符

【讨论】:

    【解决方案2】:

    通过 > 拆分字符串,然后在数组上应用 for 循环。按位置匹配字符串。如果匹配则删除,否则添加到新的 stringBuilder。

    【讨论】:

      【解决方案3】:

      您可以使用 lastIndexOf 和 substring() 的组合。

      例子:

      String oldValue = "String1>String2>String3>String4>String5>";
      int lastIndex = oldValue.lastIndexOf('>', oldValue.length() - 2);
      String newValue = oldValue.substring(0, lastIndex + 1);
      

      【讨论】:

        猜你喜欢
        • 2017-06-16
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-18
        • 1970-01-01
        相关资源
        最近更新 更多