我想获取字符串的前4个字符以与另一个字符串进行比较。但是,当我做
之类的事情时String shortString;
shortString = longString.subString(0,3);
它采用了longString的后备阵列,因此无法轻松比较。
我也尝试将longString转换为字符数组并插入每个字符,但我似乎总是以长字符串结尾。 Android开发文档说使用String构造函数来删除支持数组,但它似乎也不适用于我。
String shortString = new String(longString.subString(0,3));
任何建议都将不胜感激!
答案 0 :(得分:2)
首先,它是string.substring()
而不是.subString()
。
其次,你的意思是“不可能轻易比较”?您可以轻松地将字符串与.equals()
进行比较。
public static void main(String[] args) {
String longString = "abcdefghijklmn";
String shortString = longString.substring(0, 3);
System.out.println(shortString.equals(longString));
}
此代码按原样打印false
。
<强>更新强>
如果您调用.substring()
以使其生成与原始字符串长度相同的字符串(例如"abc".substring(0,2)
),则它将返回对相同字符串的引用。因此,在这种情况下,.equals()
将返回true
。
答案 1 :(得分:0)
你想如何比较?有简单比较的内置方法:
longString.subString(0, 3).compareTo(anotherString);
或者,因为String是CharSequence,所以类似于:
for (int i=0; i<4; i++){
if (anotherString.charAt(i) != shortString.charAt(i)) return false;
}
也可以。
最后,每个String都在后备数组中构建,没有办法拒绝它,而longString.subString(0,3)总是(除了索引超出范围)返回一个带有4个元素的Char数组的String。
答案 2 :(得分:0)
如果您确实需要摆脱支持数组,以下内容将起作用:
String newString = StringBuilder(oldString).toString();
这可能是必要的,例如,如果要解析字符串并创建子字符串,则可能需要执行此操作:
String newString = StringBuilder(oldString.substring(start,end).toString();
这将创建一个真正的新字符串,其中包含零偏移和独立后备阵列。否则,您将维护相同的后备阵列,在极少数情况下可能会导致堆出现问题,因为它永远不会被垃圾回收。