拆分字符串('_'作为分隔符)

Dee*_*tty 1 java string parsing

我有以下字符串

String S1="S1_T1_VIEW";
Run Code Online (Sandbox Code Playgroud)

我希望它被拆分并分配给字符串,如下所示:

String permission = "VIEW";
String component = "S1_T1";
String parent = "S1";
Run Code Online (Sandbox Code Playgroud)

我尝试使用S1.split() 功能它没有多大帮助.

字符串也可以是这样的

String S1="S1_T1_C1_DELETE";
Run Code Online (Sandbox Code Playgroud)

那段时间的结果应该是

String permission = "DELETE";
String component = "S1_T1_C1";
String parent = "S1_T1";
Run Code Online (Sandbox Code Playgroud)

任何的意见都将会有帮助 .

提前致谢

Mac*_*Mac 7

我假设以下内容:

  • permissionS1遵循最后一个下划线的部分.
  • componentS1最后一个下划线之前的部分.
  • parent是部分component前述最后的下划线.

如果是这样,也许尝试以下方法?这基本上只是对上述规则的字面解释,通过查找适当的下划线来拆分字符串.

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);
Run Code Online (Sandbox Code Playgroud)


ken*_*ytm 5

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

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);
Run Code Online (Sandbox Code Playgroud)

演示:http://ideone.com/NhZPI2