从字符串中提取子字符串

在 android 中,从字符串中提取子字符串的最佳方法是什么?

258207 次浏览

substring() :

str.substring(startIndex, endIndex);

如果您知道 Start 和 End 索引,则可以使用

String substr=mysourcestring.substring(startIndex,endIndex);

如果你想从特定的索引得到子字符串直到结束,你可以使用:

String substr=mysourcestring.substring(startIndex);

如果你想让子字符串从特定的字符直到结束,你可以使用:

String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue"));

如果你想从 之后得到一个特定的字符串,把这个数字加到 .indexOf(char):

String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue") + 1);

使用来自 android 的文本未知类: < br/> TextUtils.substring (charsequence source, int start, int end)

您可以使用子序列,它与 C 中的 subr 相同

 Str.subSequence(int Start , int End)

下面是一个现实生活中的例子:

String hallostring = "hallo";
String asubstring = hallostring.substring(0, 1);

在示例中,子串将返回: h

在 Android 中获取子字符串的最佳方法是使用(如@user2503849所说) TextUtlis.substring(CharSequence, int, int)方法。我可以解释原因。如果你看看 android.jar(最新的 API 22)中的 String.substring(int, int)方法,你会看到:

public String substring(int start) {
if (start == 0) {
return this;
}
if (start >= 0 && start <= count) {
return new String(offset + start, count - start, value);
}
throw indexAndLength(start);
}

好的,那么... 您认为私有构造函数 String(int, int, char[])看起来如何?

String(int offset, int charCount, char[] chars) {
this.value = chars;
this.offset = offset;
this.count = charCount;
}

我们可以看到它一直引用“ old”值 char[]数组,因此 GC 无法释放它。

在最新的 Java 中,它是固定的:

String(int offset, int charCount, char[] chars) {
this.value = Arrays.copyOfRange(chars, offset, offset + charCount);
this.offset = offset;
this.count = charCount;
}

Arrays.copyOfRange(...)在内部使用本机数组复制。

就是这样:)

最好的问候!

你可以用这个代码

    public static String getSubString(String mainString, String lastString, String startString) {
String endString = "";
int endIndex = mainString.indexOf(lastString);
int startIndex = mainString.indexOf(startString);
Log.d("message", "" + mainString.substring(startIndex, endIndex));
endString = mainString.substring(startIndex, endIndex);
return endString;
}

在这个 mainString是一个超级字符串。像 “ I _ AmANDROID. 开发人员” lastString是类似“ .”的字符串,startString 是类似“ _”的字符串。 这个 function返回“ AmANDROID”。 享受你的编码时间吧:)

还有另一种方法,如果您想获取字符前后的子字符串

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

看看这个帖子 如何在字符串中查找子字符串的前后位置

substring(int startIndex, int endIndex)

如果不指定 EndIndex,该方法将返回所有 字符从 StartIndex

StartIndex: 起始索引是包含性的

EndIndex: 结束索引是独占的

例如:

String str = "abcdefgh"

str.substring(0, 4) = > abcd

str.substring(4, 6) = > ef

str.substring(6) = > gh

当查找与模式匹配的子字符串的多个匹配项时

    String input_string = "foo/adsfasdf/adf/bar/erqwer/";
String regex = "(foo/|bar/)"; // Matches 'foo/' and 'bar/'


Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input_string);


while(matcher.find()) {
String str_matched = input_string.substring(matcher.start(), matcher.end());
// Do something with a match found
}

所有的应急人员都给出了很好的答案。然而,我给你所有相关的方法,这样任何人都可以从一个地方,我会编辑我的答案,如果我发现一些新的东西。

  1. Substring (0)-用于从给定的特定字符切割字符串。

  2. 子字符串(0,2)-从开始(0)到结束(2)字符给出子字符串。

  3. 拆分(“ NAME”)-返回您的字符串在两个部分首先是您使用的拆分“ NAME”和另一部分是其余的字符串合并。

  4. 子序列(0,3)-返回给定开始(0)和结束索引(3)的序列。

    这一个不是专门用于拆分字符串,但它可能是用于全部的一些

  5. Startswith (“ A”,3)-返回特定起始字符的字符串。

    例如:

    String s = "StackOverflow";
    String[] split = s.split("Stack");
    
    
    System.out.println("STRING NAME:"+s.substring(2));
    System.out.println("STRING NAME:"+s.substring(2,3));
    System.out.println("STRING NAME:"+split[1]);
    System.out.println("STRING NAME:"+split[0]);
    System.out.println("STRING NAME:"+s.subSequence(2,5));
    

    产出:

     1)ackOverflow
    2)a
    3)Overflow
    4)stack
    5)ack
    

我希望这将给你足够的信息,你需要的。