ski*_*kip 22 java regex string
我有一个字符串说123dance456,我需要分成包含子串前的第一子串两个字符串dance(即123)和子串后dance(即456).我需要找到它们并将它们保存在单独的字符串变量中,比如说String firstSubString = 123;和String secondSubString = 456;.
是否有任何给定的String方法可以做到这一点?
Ale*_*x D 45
你可以用String.split(String regex).做这样的事情:
String s = "123dance456";
String[] split = s.split("dance");
String firstSubString = split[0];
String secondSubString = split[1];
Run Code Online (Sandbox Code Playgroud)
请注意,如果"dance"在原始字符串中出现多次,split()则会在每次出现时分割 - 这就是返回值为数组的原因.
Mil*_*eri 18
你可以这样做:
String str = "123dance456";
String substr = "dance";
String before = str.substring(0, str.indexOf(substr));
String after = str.substring(str.indexOf(substr) + substr.length());
Run Code Online (Sandbox Code Playgroud)
要么
String str = "123dance456";
String substr = "dance";
String[] parts = str.split(substr);
String before = parts[0];
String after = parts[1];
Run Code Online (Sandbox Code Playgroud)
值得注意的是,如果我们有多个子字符串出现,则第二个答案不起作用.为此,如果我们只想要识别第一个,那么使用限制调用split会更安全:
String[] parts = str.split(substr, 2);
Run Code Online (Sandbox Code Playgroud)
这确保返回的数组最多包含两个元素.此外,由于split将其输入解释为正则表达式,我们必须警惕无效的正则表达式语法.因此,我更倾向于第一个解决方案,因为无论原始子串的组成如何,它都可以工作.
为了使第一个答案更有效 - 因为这是我的首选答案 - 那么,我们需要记住子字符串的位置:
final int position = str.indexOf(substr);
if (position >= 0) {
//if the substring does occur within the string, set the values accordingly
before = str.substring(0, position);
after = str.substring(position + substr.length());
} else {
//otherwise, default to the empty string (or some other value)
before = "";
after = "";
}
Run Code Online (Sandbox Code Playgroud)
注意这些小边缘情况总是值得的.