我一直试图找出如何在两个特殊字符之间提取字符串的一部分'和'我一直在研究正则表达式,但坦率地说我无法理解它。
Java代码中的示例:
String str="21*90'89\"";
我想退出89
一般来说,我只想知道如何在两个特定字符之间提取字符串的一部分。
另外,如果知道如何从一开始就将部分字符串提取到一个特定字符(例如21),那就太棒了。
答案 0 :(得分:31)
试试这个正则表达式:
'(.*?)"
作为Java字符串文字,您必须按如下方式编写它:
"'(.*?)\""
这是一个更完整的示例,演示如何将此正则表达式与Matcher
:
Pattern pattern = Pattern.compile("'(.*?)\"");
Matcher matcher = pattern.matcher(str);
if (matcher.find()) {
System.out.println(matcher.group(1));
}
查看在线工作:ideone
答案 1 :(得分:10)
如果你总是有这样的字符串(有3个部分),那就足够了:
String str= "21*90'89\"";
String between = str.split("\"|'")[1];
答案 2 :(得分:4)
另一种选择,如果您可以确保您的字符串始终采用您提供的格式,则可以使用快速且脏的子字符串/ indexOf解决方案:
str.substring(str.indexOf("'") + 1, str.indexOf("\""));
要获得您要求的第二条数据:
str.substring(0, str.indexOf("*"));
答案 3 :(得分:4)
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]
答案 4 :(得分:0)
我在这里错过了最简单的解决方案:
str.replaceFirst(".*'(.*)\".*", "$1");
这个解决方案是迄今为止最短的解决方案,但它有一些缺点:
我不会使用它,除非是快速破解或者我真的可以确定输入格式。
答案 5 :(得分:0)
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(" ");
}
答案 6 :(得分:-2)
String str= 21*90'89;
String part= str.split("[*|']");
System.out.println(part[0] +""+part[1]);