Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拆分字符串(“”“作为分隔符)_Java_String_Parsing - Fatal编程技术网

Java 拆分字符串(“”“作为分隔符)

Java 拆分字符串(“”“作为分隔符),java,string,parsing,Java,String,Parsing,我有下面的字符串 String S1="S1_T1_VIEW"; 我希望将其拆分并分配给字符串,如下所示: String permission = "VIEW"; String component = "S1_T1"; String parent = "S1"; 我尝试使用S1.split函数,但没有多大帮助 字符串也可以是这样 String S1="S1_T1_C1_DELETE"; 那时候的结果应该是 String permission = "DELETE"; String compo

我有下面的字符串

String S1="S1_T1_VIEW";
我希望将其拆分并分配给字符串,如下所示:

String permission = "VIEW";
String component = "S1_T1";
String parent = "S1";
我尝试使用S1.split函数,但没有多大帮助

字符串也可以是这样

String S1="S1_T1_C1_DELETE";
那时候的结果应该是

String permission = "DELETE";
String component = "S1_T1_C1";
String parent = "S1_T1";
任何建议都会有帮助


提前感谢

我假设:

权限是最后一条下划线后面的S1部分。 组件是最后一个下划线之前的S1部分。 父级是组件的最后一个下划线之前的部分。 如果是这样,或许可以尝试以下方法?这本质上只是对上述规则的字面解释,通过找到适当的下划线来拆分字符串

int lastUnderscore = S1.lastIndexOf("_");
String permission = S1.substring(lastUnderscore + 1);
String component = S1.substring(0, lastUnderscore);
lastUnderscore = component.lastIndexof("_");
String parent = component.substring(0, lastUnderscore);

我假设如下:

权限是最后一条下划线后面的S1部分。 组件是最后一个下划线之前的S1部分。 父级是组件的最后一个下划线之前的部分。 如果是这样,或许可以尝试以下方法?这本质上只是对上述规则的字面解释,通过找到适当的下划线来拆分字符串

int lastUnderscore = S1.lastIndexOf("_");
String permission = S1.substring(lastUnderscore + 1);
String component = S1.substring(0, lastUnderscore);
lastUnderscore = component.lastIndexof("_");
String parent = component.substring(0, lastUnderscore);

我们也可以使用正则表达式

private static final Pattern pattern = Pattern.compile("^((.+)_[^_]+)_([^_]+)$");

    final Matcher matcher = pattern.matcher(input);
    if (!matcher.matches()) {
        return null;
    }

    String permission = matcher.group(3);
    String component = matcher.group(1);
    String parent = matcher.group(2);

演示:

我们也可以使用正则表达式

private static final Pattern pattern = Pattern.compile("^((.+)_[^_]+)_([^_]+)$");

    final Matcher matcher = pattern.matcher(input);
    if (!matcher.matches()) {
        return null;
    }

    String permission = matcher.group(3);
    String component = matcher.group(1);
    String parent = matcher.group(2);

演示:

只有这两种或更多类型的字符串?规则是什么?许可总是最后一部分吗?组件是除最后一部分以外的所有组件的组合吗?parent是组件的最后一个吗?@mhasan权限前的字符串长度可能会有所不同,但它总是用下划线分隔,并遵循相同的约定,如权限前的sting总是分配给组件,parent将在两个结束下划线之前字符串。我想说正则表达式。给定的案例可以很简单地匹配-它是否始终有效?你能理解/维护正则表达式吗?@LutzHorn是的,确切地说是这两种或更多类型的字符串?规则是什么?许可总是最后一部分吗?组件是除最后一部分以外的所有组件的组合吗?parent是组件的最后一个吗?@mhasan权限前的字符串长度可能会有所不同,但它总是用下划线分隔,并遵循相同的约定,如权限前的sting总是分配给组件,parent将在两个结束下划线之前字符串。我想说正则表达式。给定的案例可以很简单地匹配-它是否始终有效?你能理解/维护正则表达式吗?@LutzHorn是的,没错,你也能做到。如果这成为一个问题,它肯定会比我的方法更灵活地处理更复杂的模式。是的,你也可以这样做。如果这成为一个问题,那么对于更复杂的模式,它肯定比我的方法更灵活。