Android / Java - 删除子串从最后一个字符开始直到某个字符

时间:2014-11-22 09:56:54

标签: java android regex string

美好的一天。对不起,标题含糊不清。

我有一个Android应用程序,我有自定义listView,在自定义ListView中,我有项目名称。例如,列表可能如下所示:

  1. 项目A
  2. 样本项目B
  3. 样本清单项目C
  4. 示例(项目)D
  5. 最后(示例)项目E
  6. 用户可以执行操作并将列表更新为:

    1. 项目A(因素单位)
    2. 样本项目B
    3. 样本清单项目C
    4. 示例(项目)D
    5. 最后(示例)项目(E)
    6. 如您所见,第一项是根据用户输入追加的。我想删除这个附加的用户输入(包括括号和括号之前的空格)这个附加的用户输入长度不同,所以我不能String item = item.replace(item.substring((str.length()-lengthOfInput),""));

      我不能对用括号括起来的任何东西进行子字符串删除,因为第4和第5项除了将用括号括起的未来用户输入之外,括号中包含字符串。

      我现在想到的解决方案是检查项目的最后一个字符,如果它是),然后我向后遍历字符串直到我点击(,然后检查是否子字符串包含OF

      我已经检查了我的数据库数据库,所有以括号内的子字符串结尾的项目都不包含模式UNIT OF FACTOR,这使我的解决方案成为可行的。

      现在,我的问题是,是否有一个简短的解决方案?我知道我可以做一个for循环来遍历最后一个位置的String,在某些情况下是),然后向后遍历直到我点击(。点击第一个(后,我有了我的子串。然后我可以检查子字符串是否包含OF,如果是,我修剪它,否则,它不是我要删除的字符串。

      是否有更短的版本如何做到这一点?对不起,如果我已经有了可行的解决方案,我会寻求帮助。我正在寻求帮助,因为当较短的解决方案可用时,我不想编写长解决方案。另外,当我在输入这个问题时,我制定了上面的解决方案 - 道歉。

      非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用表单

的非常基本的正则表达式
\\([^)]*OF[^)]*\\

OR

使用积极向前看

\\([^)]*(?=OF).*\\)

例如

String str = "Item A (UNIT OF FACTOR)", str1= "Item A (B)";;
str =   str.replaceAll("\\([^)]*OF[^)]*\\)", "");
str1 =  str1.replaceAll("\\([^)]*OF[^)]*\\)", ""); 
System.out.println(str);
System.out.println(str1);


str = "Item A (UNIT OF FACTOR)";
str1 = "Item A (B)";
str =   str.replaceAll("\\([^)]*(?=OF).*\\)", ""); // Using postive look ahead
str1 =  str1.replaceAll("\\([^)]*(?=OF).*\\)", ""); // Using postive look ahead
System.out.println(str);
System.out.println(str1);

将提供输出

Item A 
Item A (B)
Item A 
Item A (B)