如何在字符串中查找子字符串之前和之后

2022-09-01 19:43:42

我有一个字符串说,我需要将其拆分为两个字符串,其中包含子字符串之前(即)和子字符串(即)之后的第一个子字符串。我需要找到它们并将它们保存在单独的字符串变量中,例如 和 String 。123dance456dance123dance456String firstSubString = 123;secondSubString = 456;

是否有任何给定的 String 方法可以做到这一点?


答案 1

您可以使用 String.split(String regex)。只需执行如下操作:

String s = "123dance456";
String[] split = s.split("dance");
String firstSubString = split[0];
String secondSubString = split[1];

请注意,如果在原始字符串中多次出现,则会在每次出现时拆分 - 这就是为什么返回值是一个数组。"dance"split()


答案 2

您可以执行以下操作:

String str = "123dance456";
String substr = "dance";
String before = str.substring(0, str.indexOf(substr));
String after = str.substring(str.indexOf(substr) + substr.length());

String str = "123dance456";
String substr = "dance";
String[] parts = str.split(substr);
String before = parts[0];
String after = parts[1];

值得注意的是,如果我们有多个子字符串的出现,则第二个答案不起作用。为此,如果我们只想识别第一个,那么更安全的做法是使用限制来调用 split:

String[] parts = str.split(substr, 2);

这可确保返回的数组最多有两个元素。此外,由于将其输入解释为正则表达式,因此我们必须警惕无效的正则表达式语法。因此,我宁愿选择第一个解决方案,因为无论原始子字符串的组成如何,它都可以工作。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 = "";
}

它总是要注意这些小的边缘情况。