gpt4 book ai didi

java - 替代子串

转载 作者:搜寻专家 更新时间:2023-11-01 03:10:27 24 4
gpt4 key购买 nike

我在将值添加到 String 数组时遇到了一个奇怪的问题,该数组后来涉及使用 HashMap 的数组排序。我有一个文件名 XFR900a,使用以下代码将 XFR900 部分添加到数组中;

private ArrayList<String> Types = new ArrayList<String>();

...

Types.add(name.substring(0,(name.length() - 1));
System.out.println(name.substring(0,(name.length() - 1));

我什至打印了给出“XFR900”的行,但是当我改用以下代码时,稍后数组排序的行为有所不同;

Types.add("XFR900");
System.out.println(name.substring(0,(name.length() - 1));

这只是手动完成的子字符串部分,非常困惑。

是否有任何好的子字符串替代品,因为那里必须有一些奇怪的非 ascii 字符?

菲尔

更新

谢谢大家的评论。这是稍后比较字符串的一些代码;

    for (int i=0;i< matchedArray.size();i++){

//run through the arrays
if (last == matchedArray.get(i)) {
//add arrays to a data array
ArrayList data = new ArrayList();
data.add(matchedArray1.get(i));
data.add(matchedArray2.get(i));
data.add(matchedArray3.get(i));
data.add(matchedArray4.get(i));
data.add(matchedArray5.get(i));
//put into hash map
map.put(matchedArray.get(i), data);
}
else {
//TODO
System.out.println("DO NOT MATCH :" + last + "-" + matchedArray.get(i));

如您所见,我添加了一个测试 System.out.println("DO NOT MATCH"... 下面是一些输出;

不匹配:FR99-XFR900不匹配:XFR900-XFR900

我只在 XFR900a 文件名上运行子字符串。问题是最后要打印的测试行 != matchedArray.get(i) 但是当打印到显示器时它们是相同的。

菲尔

最佳答案

永远不要使用== 运算符来比较字符串的内容。 == 检查是否是同一个对象。改为编写 last.equals(matchedArray.get(i))equals() 方法检查对象是否相等,而不是它们是否相同。在 String 的情况下,它检查两个字符串是否包含相同的字符。这可能会消除您的奇怪行为。

PS:== 对string 的行为有点不可预测,因为java 虚拟机做了一些优化。如果两个字符串相等,则 jvm 可能对两者使用相同的对象。这是可能的,因为 String 对象无论如何都是不可变的。如果您手动写下子字符串,这将解释行为的差异。在一种情况下,jvm 会优化,而在另一种情况下,它不会。

关于java - 替代子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11744852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com