2013-03-15 50 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); 

    } 
} 
相关问题