Java 断开字符串变量';将内容分为两部分

Java 断开字符串变量';将内容分为两部分,java,android,regex,string,variables,Java,Android,Regex,String,Variables,我有一个字符串变量,我必须将字符串变量的内容分成两部分,并将它们保存在两个不同的字符串变量中。我已经提取了它的一部分,但我无法提取另一部分 代码如下: 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

我有一个字符串变量,我必须将字符串变量的内容分成两部分,并将它们保存在两个不同的字符串变量中。我已经提取了它的一部分,但我无法提取另一部分

代码如下:

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\u id变量中

现在,我想从变量中提取速度测试150(min)演示1,并将其保存在名为set_name的变量中

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


我应该如何提取字符串的不同部分

假设格式相同:


set_id.substring(set_id.indexOf(“)”)+2)

假设格式相同:


set_id.substring(set_id.indexOf(“)”)+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);

获取第一个子字符串时,您正在覆盖原始字符串。将每个子字符串保存在新变量中:

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

检查这个。。。可以使用更好、更高效的正则表达式

    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");
    }
Pattern=Pattern.compile(\\(\\d{0,1})\\)(.*$);
String String=“(1)速度测试150(分钟)演示1”;
Matcher-Matcher=pattern.Matcher(字符串);
if(matcher.matches()){
System.out.println(“总匹配数:+matcher.groupCount());

对于(inti=1,max=matcher.groupCount();i检查此项…可以使用更好、更高效的正则表达式

    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");
    }
Pattern=Pattern.compile(\\(\\d{0,1})\\)(.*$);
String String=“(1)速度测试150(分钟)演示1”;
Matcher-Matcher=pattern.Matcher(字符串);
if(matcher.matches()){
System.out.println(“总匹配数:+matcher.groupCount());
对于(inti=1,max=matcher.groupCount();ii添加“]”以查找最终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(分钟)演示

I aaded“]”以找出末端卡车

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

尝试以下操作:

\\((\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");
请尝试以下操作:

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

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

  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));
    }

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

  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));
    }
你可以试试这个:

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

    }
}
你可以试试这个:

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

    }
}

如果格式为常量,则使用正则表达式提取此类值是一个更好的选项。如果格式为常量,则使用正则表达式提取此类值是一个更好的选项。名称提取正确,但id如下所示:(1.需要移除开头括号抱歉,我忘记将第三行更改为引用“part1”而不是“set_id”。请使用上面更新的代码进行尝试,它现在应该可以工作了。名称已正确提取,但id如下所示:(1.需要拆下开头括号对不起,我忘记将第三行更改为引用“part1”而不是“set_id”。请使用上面更新的代码进行尝试,它现在应该可以工作了。