簡體   English   中英

從Java中的String獲取子串

[英]Get Substring from a String in Java

我有以下文字:

......,Niedersachsen,自2009年3月3日起不收費,類別:...,

現在我想在NOT IN CHARGE SINCE:之后提取日期NOT IN CHARGE SINCE:直到逗號。 所以我只需要03.2009作為我的子串的結果。

那我怎么辦呢?

String substr = "not in charge since:";
String before = s.substring(0, s.indexOf(substr));
String after = s.substring(s.indexOf(substr),s.lastIndexOf(","));

編輯

for (String s : split) {
    s = s.toLowerCase();
    if (s.contains("ex peps")) {
        String substr = "not in charge since:";
        String before = s.substring(0, s.indexOf(substr));
        String after = s.substring(s.indexOf(substr), s.lastIndexOf(","));

        System.out.println(before);
        System.out.println(after);
        System.out.println("PEP!!!");
    } else {
        System.out.println("Line ok");
    }
}

但這不是我想要的結果。

您可以使用模式,例如:

String str = "Niedersachsen,NOT IN CHARGE SINCE: 03.2009, CATEGORY";
Pattern p = Pattern.compile("\\d{2}\\.\\d{4}");
Matcher m = p.matcher(str);

if (m.find()) {
    System.out.println(m.group());
}

產量

03.2009

注意:如果您想在所有String中獲得類似日期,則可以使用while不是if


編輯

或者您可以使用:

String str = "Niedersachsen,NOT IN CHARGE SINCE: 03.03.2009, CATEGORY";
Pattern p = Pattern.compile("SINCE:(.*?)\\,");
Matcher m = p.matcher(str);

if (m.find()) {
    System.out.println(m.group(1).trim());
}

您可以使用:來分隔String

String substr = "NOT IN CHARGE SINCE:";
String before = s.substring(0, s.indexOf(substr)+1);
String after = s.substring(s.indexOf(':')+1, s.lastIndexOf(','));

當然,正則表達式給你更多的方式做搜索/匹配,但假設“:”是你正在尋找的關鍵事情(在該位置恰好一次顯示出來),那么:

s.substring(s.indexOf(':')+1, s.lastIndexOf(',')).trim();

是獲取該子串的“最簡單”和“最少開銷”的方式。

提示:當您搜索單個字符時,請使用字符作為搜索模式; 不是一個字符串!

如果您有一個更通用的用例,並且您知道要匹配的文本結構,那么您可以從使用正則表達式中獲益:

Pattern pattern = Pattern.compile(".*NOT IN CHARGE SINCE: \([0-9.]*\),");
Matcher matcher = pattern.matcher(line);
System.out.println(matcher.group());

解決問題的一種更通用的方法是使用正則表達式匹配每個組之間:和,

Pattern pattern = Pattern.compile("(?<=:)(.*?)(?=,)");
Matcher m = p.matcher(str);

你必須為它創建一個模式。 試試這個作為一個簡單的正則表達式起點,並隨意即興:

String s = "...,Niedersachsen,NOT IN CHARGE SINCE: 03.2009, CATEGORY:....,";
Pattern pattern = Pattern.compile(".*NOT IN CHARGE SINCE: ([\\d\\.]*).*");
Matcher matcher = pattern.matcher(s);

if (matcher.find())
{
    System.out.println(matcher.group(1));
}

這應該可以獲得您在日期收到的任何數字組。

暫無
暫無

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

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