美好的一天。对不起,标题含糊不清。
我有一个Android应用程序,我有自定义listView,在自定义ListView中,我有项目名称。例如,列表可能如下所示:
用户可以执行操作并将列表更新为:
如您所见,第一项是根据用户输入追加的。我想删除这个附加的用户输入(包括括号和括号之前的空格)这个附加的用户输入长度不同,所以我不能String item = item.replace(item.substring((str.length()-lengthOfInput),""));
我不能对用括号括起来的任何东西进行子字符串删除,因为第4和第5项除了将用括号括起的未来用户输入之外,括号中包含字符串。
我现在想到的解决方案是检查项目的最后一个字符,如果它是)
,然后我向后遍历字符串直到我点击(
,然后检查是否子字符串包含OF
。
我已经检查了我的数据库数据库,所有以括号内的子字符串结尾的项目都不包含模式UNIT OF FACTOR
,这使我的解决方案成为可行的。
现在,我的问题是,是否有一个简短的解决方案?我知道我可以做一个for循环来遍历最后一个位置的String,在某些情况下是)
,然后向后遍历直到我点击(
。点击第一个(
后,我有了我的子串。然后我可以检查子字符串是否包含OF
,如果是,我修剪它,否则,它不是我要删除的字符串。
是否有更短的版本如何做到这一点?对不起,如果我已经有了可行的解决方案,我会寻求帮助。我正在寻求帮助,因为当较短的解决方案可用时,我不想编写长解决方案。另外,当我在输入这个问题时,我制定了上面的解决方案 - 道歉。
非常感谢任何帮助。谢谢。
答案 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)