Java-提取两个特殊字符之间的字符串的一部分

我一直试图找出如何在两个特殊字符之间提取字符串的一部分’和’我一直在研究正则表达式,但坦率地说我无法理解它。
Java代码中的示例:

String str="21*90'89\""; 

我想退出89

一般来说,我只想知道如何在两个特定字符之间提取字符串的一部分。

另外,如果知道如何从一开始就将部分字符串提取到特定字符(例如21),那将会很高兴。

试试这个正则表达式:

 '(.*?)" 

作为Java字符串文字,您必须按如下方式编写它:

 "'(.*?)\"" 

这是一个更完整的示例,演示如何将此正则表达式与Matcher一起使用:

 Pattern pattern = Pattern.compile("'(.*?)\""); Matcher matcher = pattern.matcher(str); if (matcher.find()) { System.out.println(matcher.group(1)); } 

看它在线工作: ideone

如果你总是有这样的字符串(有3个部分)那么这就足够了:

  String str= "21*90'89\""; String between = str.split("\"|'")[1]; 

另一种选择,如果您可以确保您的字符串始终采用您提供的格式,则可以使用快速且脏的子字符串/ indexOf解决方案:

 str.substring(str.indexOf("'") + 1, str.indexOf("\"")); 

并获得您要求的第二条数据:

 str.substring(0, str.indexOf("*")); 
 public static void main(final String[] args) { final String str = "21*90'89\""; final Pattern pattern = Pattern.compile("[\\*'\"]"); final String[] result = pattern.split(str); System.out.println(Arrays.toString(result)); } 

你正在寻找…上述程序产生:

 [21, 90, 89] 

我在这里错过了最简单的解决方案:

 str.replaceFirst(".*'(.*)\".*", "$1"); 

这个解决方案是迄今为止最短的解决方案,但它有一些缺点:

  • 如果字符串看起来不同,则会在没有警告的情况下返回整个字符串。
  • 它的效率不高,因为使用的正则表达式会针对每次使用进行编译。

我不会使用它,除非作为快速黑客或我真的可以确定输入格式。

  String str="abc#defg@lmn!tp?pqr*tsd"; String special="!?@#$%^&*()/<>{}[]:;'`~"; ArrayList al=new ArrayList(); for(int i=0;i 
 String str= 21*90'89; String part= str.split("[*|']"); System.out.println(part[0] +""+part[1]);