Java- Extract part of a string between two special characters
我一直在尝试找出如何提取两个特殊字符之间的字符串的一部分'和"我一直在研究正则表达式,但是坦率地说,我无法理解它。
Java代码示例:
1 |
我想掏出89
一般来说,我想知道如何在两个特定字符之间提取字符串的一部分。
另外,很高兴知道如何从一开始就将字符串的一部分提取到特定字符,例如21。
尝试以下正则表达式:
1 | '(.*?)" |
作为Java字符串文字,您必须按以下方式编写:
1 | "'(.*?)"" |
这是一个更完整的示例,演示如何在
中使用此正则表达式
1 2 3 4 5 | Pattern pattern = Pattern.compile("'(.*?)""); Matcher matcher = pattern.matcher(str); if (matcher.find()) { System.out.println(matcher.group(1)); } |
查看其在线运行:ideone
如果您总是有这样的字符串(包含3个部分),那么这就足够了:
1 2 |
1 2 3 4 5 6 |
您正在寻找的是...上述程序产生:
1 | [21, 90, 89] |
另一种选择,如果您可以确保字符串始终采用您提供的格式,则可以使用快捷的子字符串/ indexOf解决方案:
1 | str.substring(str.indexOf("'") + 1, str.indexOf(""")); |
并获取您要求的第二条数据:
1 | str.substring(0, str.indexOf("*")); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | String str="abc#defg@lmn!tp?pqr*tsd"; String special="!?@#$%^&*()/<>{}[]:;'`~"; ArrayList<Integer> al=new ArrayList<Integer>(); for(int i=0;i<str.length();i++) { for(int j=0;j<special.length();j++) if(str.charAt(i)==special.charAt(j)) al.add(i); } for(int i=0;i<al.size()-1;i++) { int start=al.get(i); int end=al.get(i+1); for(int j=start+1;j<end;j++) System.out.print(str.charAt(j)); System.out.print(""); } |
我在这里缺少最简单的解决方案:
1 | str.replaceFirst(".*'(.*)".*","$1"); |
此解决方案是最短的,但是它有一些缺点:
- 如果字符串看起来不同,则可以不经警告就将整个字符串取回。
- 这不是很有效,因为使用过的正则表达式会针对每次使用进行编译。
我不会使用它,除非是为了快速破解或我真的可以确定输入格式。
1 2 3 |