2013-03-15 73 views
0

我有一個字符串變量,我必須將字符串變量的內容分成兩部分,並將它們保存在兩個不同的字符串變量中。我已經提取了其中的一部分,但我無法提取其他部分。將字符串變量的內容分爲兩部分

這是代碼:

String set_id="(1) Speed Test 150(min) Demo 1"; 
set_id = set_id.substring(set_id.indexOf("(") + 1); 
set_id = set_id.substring(0, set_id.indexOf(")")); 

上述代碼已提取的數字我被保存在SET_ID變量。

現在我想提取速度測試150(分鐘)從可變演示1並將其保存在名爲set_name變量。

變量內容的格式將始終保持不變,但數字和名稱本身可能會有所不同。

我應該怎麼做提取字符串的不同部分?

+1

使用正則表達式將是一個更好的選擇來提取這些值,如果格式是固定的。 – 2013-03-15 05:02:05

回答

2

您將要覆蓋的時候,你所得到的第一子原始字符串。保存每個子在一個新的變量:

String set_id="(1) Speed Test 150(min) Demo 1"; 
String part1 = set_id.substring(set_id.indexOf("(") + 1); 
part1 = part1.substring(0, part1.indexOf(")")); 
String part2 = set_id.substring(set_id.indexOf(")")+2); 
+0

這個名字被正確提取出來,但是這個ID看起來像:(1.前面的括號需要被刪除 – kittu88 2013-03-15 05:09:49

+0

對不起,我忘記把第三行改成引用'part1'而不是'set_id'。上面的代碼,它現在應該工作。 – scaevity 2013-03-15 05:14:01

0

假設的格式是一樣的:

set_id.substring(set_id.indexOf(")")+2);

0

入住這...一個更好,更高效的正則表達式可用於...

Pattern pattern = Pattern.compile("\\((\\d{0,1})\\)(.*$)"); 
    String string = "(1) Speed Test 150(min) Demo 1"; 
    Matcher matcher = pattern.matcher(string); 
    if (matcher.matches()) { 
     System.out.println("Total matches: " + matcher.groupCount()); 
     for(int i=1, max=matcher.groupCount(); i<=max; i++) { 
      System.out.println(i + " : " + matcher.group(i)); 
     } 
    } else { 
     System.out.println("No match"); 
    } 
0

我aaded「]」,找出了年底carachter 。

String set_id="(1) Speed Test 150(min) Demo 1]"; 
     String set_name=set_id.subSequence(set_id.indexOf(')')+1, set_id.indexOf(']')).toString(); 
     System.out.println(set_name); 

現在它爲我工作。

O/P: - 速度測試150(分鐘)演示

1

嘗試以下方法:

\\((\d+)\\)\s*(.+) 

$1給出id和$2給出名稱。

這裏,

\\(\\)匹配開閉括號。(逃脫,()有特殊意義)

(\d+)匹配一個或多個數字(捕獲,使得$ 1可以被用來指代這個)

\s*匹配零場或多個空格

(.+)比賽一個或多個(任何)字符(再次捕獲)

使用它像

String string = "(1) Speed Test 150(min) Demo 1"; 
id = string.replaceAll("\\((\d+)\\)\s*(.+)","$1"); 
name = string.replaceAll("\\((\d+)\\)\s*(.+)","$2"); 
0

您可以使用Regex來提取變量。下面是示例代碼。

Pattern pattern = Pattern.compile("(\\d+).+?(\\d+)\\("); 
    String sample = "(1) Speed Test 150(min) Demo 1"; 
    Matcher matcher = pattern.matcher(sample); 
    if(matcher.find()){ 
     System.out.println(matcher.group(1)); 
     System.out.println(matcher.group(2)); 
    } 
0

你可以試試這個:

public class RegexTest { 

    public static void main(String[] args) { 

     String originalString = "(1) Speed Test 150(min) Demo 1"; 
     String setId = originalString.replaceAll("\\((\\d+)\\)\\s*(.+)", "$1").trim(); 
     String setName = originalString.replaceAll("\\((\\d+)\\)\\s*(.+)", "$2").trim(); 
     System.out.println("setId: " + setId); 
     System.out.println("setName: " + setName); 

    } 
} 
相關問題