在 android 中,从字符串中提取子字符串的最佳方法是什么?
substring() :
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):
.indexOf(char)
String substr=mysourcestring.substring(mysourcestring.indexOf("characterValue") + 1);
使用来自 android 的文本未知类: < br/> TextUtils.substring (charsequence source, int start, int end)
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)方法,你会看到:
TextUtlis.substring(CharSequence, int, int)
android.jar
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, int, char[])
String(int offset, int charCount, char[] chars) { this.value = chars; this.offset = offset; this.count = charCount; }
我们可以看到它一直引用“ old”值 char[]数组,因此 GC 无法释放它。
char[]
在最新的 Java 中,它是固定的:
String(int offset, int charCount, char[] chars) { this.value = Arrays.copyOfRange(chars, offset, offset + charCount); this.offset = offset; this.count = charCount; }
Arrays.copyOfRange(...)在内部使用本机数组复制。
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”。 享受你的编码时间吧:)
mainString
lastString
function
还有另一种方法,如果您想获取字符前后的子字符串
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: 结束索引是独占的
如果不指定 EndIndex,该方法将返回所有 字符从 StartIndex。
StartIndex: 起始索引是包含性的
EndIndex: 结束索引是独占的
例如:
String str = "abcdefgh"
str.substring(0, 4) = > abcd
str.substring(0, 4)
str.substring(4, 6) = > ef
str.substring(4, 6)
str.substring(6) = > gh
str.substring(6)
当查找与模式匹配的子字符串的多个匹配项时
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 }
所有的应急人员都给出了很好的答案。然而,我给你所有相关的方法,这样任何人都可以从一个地方,我会编辑我的答案,如果我发现一些新的东西。
Substring (0)-用于从给定的特定字符切割字符串。
子字符串(0,2)-从开始(0)到结束(2)字符给出子字符串。
拆分(“ NAME”)-返回您的字符串在两个部分首先是您使用的拆分“ NAME”和另一部分是其余的字符串合并。
子序列(0,3)-返回给定开始(0)和结束索引(3)的序列。
这一个不是专门用于拆分字符串,但它可能是用于全部的一些
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
我希望这将给你足够的信息,你需要的。