Java 从字符串中删除备份数组
我想得到一个字符串的前4个字符,以便与另一个字符串进行比较。然而,当我做一些像Java 从字符串中删除备份数组,java,android,string,Java,Android,String,我想得到一个字符串的前4个字符,以便与另一个字符串进行比较。然而,当我做一些像 String shortString; shortString = longString.subString(0,3); 它需要longString的支持数组,因此无法轻松进行比较 我也尝试过将longString转换为字符数组并插入每个字符,但我似乎总是以长字符串结束。Android开发文档说使用字符串构造函数删除支持数组,但它似乎对我也不起作用 String shortString = new String(l
String shortString;
shortString = longString.subString(0,3);
它需要longString的支持数组,因此无法轻松进行比较
我也尝试过将longString转换为字符数组并插入每个字符,但我似乎总是以长字符串结束。Android开发文档说使用字符串构造函数删除支持数组,但它似乎对我也不起作用
String shortString = new String(longString.subString(0,3));
如有任何建议,将不胜感激 首先,它是
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
您希望如何比较?有一种内置的简单比较方法:
longString.subString(0, 3).compareTo(anotherString);
或者,由于字符串是字符序列,类似于:
for (int i=0; i<4; i++){
if (anotherString.charAt(i) != shortString.charAt(i)) return false;
}
for(int i=0;i在您实际需要摆脱支持数组的情况下,以下操作将起作用:
String newString=StringBuilder(oldString).toString();
例如,如果您正在分析字符串并创建子字符串,则可能需要执行以下操作:
String newString=StringBuilder(oldString.substring(start,end).toString();
这将创建一个具有零偏移量和独立备份数组的真正新字符串。否则,您将维护相同的备份数组,这在极少数情况下可能会导致堆出现问题,因为它永远不会被垃圾收集。实际上substring()
返回一个具有相同支持数组的新字符串。很抱歉输入错误。我使用==进行比较,但是.equals()似乎可以正常工作。我应该马上想到这一点。谢谢您的帮助!