0

我有一个字符串变量,我要把String变量的内容分成两部分,分别保存在两个不同的字符串变量中。我已经提取了其中的一部分,但我无法提取另一部分。

这是代码:

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(")"));

上面的代码为我提取了数字1,它保存在set_id变量中。

现在我想从变量中提取Speed Test 150(min) Demo 1并将其保存在名为set_name的变量中。

变量内容的格式将始终保持不变,但数字和名称本身可能会有所不同。

我应该怎么做才能提取字符串的不同部分?

4

7 回答 7

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);
于 2013-03-15T05:02:59.690 回答
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");
于 2013-03-15T05:17:28.950 回答
0

假设格式相同:

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

于 2013-03-15T05:02:20.420 回答
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");
    }
于 2013-03-15T05:15:03.803 回答
0

我添加了“]”来找出结尾的字符。

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(min) 演示

于 2013-03-15T05:15:15.977 回答
0

您可以使用正则表达式来提取变量。下面是示例代码。

  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));
    }
于 2013-03-15T05:21:12.323 回答
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);

    }
}
于 2013-03-15T05:23:35.113 回答