簡體   English   中英

Java-提取兩個特殊字符之間的字符串的一部分

[英]Java- Extract part of a string between two special characters

我一直試圖找出如何在兩個特殊字符之間提取字符串的一部分'和'我一直在研究正則表達式,但坦率地說我無法理解它。
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]
    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(" ");
    }

我在這里錯過了最簡單的解決方案:

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

這個解決方案是迄今為止最短的解決方案,但它有一些缺點:

  • 如果字符串看起來不同,則會在沒有警告的情況下返回整個字符串。
  • 它不是很有效,因為使用的正則表達式會針對每次使用進行編譯。

我不會使用它,除非作為一個快速黑客或我真的可以確定輸入格式。

String str= 21*90'89;
String part= str.split("[*|']");
System.out.println(part[0] +""+part[1]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM