JAVA trim() 不起作用

7

以下是我所拥有的内容:

public void readFile(String fileToOpen) {
    File myFile = new File(fileToOpen);
    try {
        Scanner inFile = new Scanner(myFile);
        while (inFile.hasNext()) {
            String input = inFile.nextLine();
            String [] readString = input.split(",");
            for (int i = 0; i < readString.length; i++) {
                readString[i].trim();
            }
            System.out.println(readString[0] + readString[1] + readString[2] + readString[3] + readString[4] + readString[5]);
            Point myPoint = new Point(Integer.parseInt(readString[1]), Integer.parseInt(readString[2]));
            if (readString[0].toLowerCase().equals("man")) {
                Man myMan = new Man(myPoint, Integer.parseInt(readString[3]), Integer.parseInt(readString[4]), readString[5]);
                this.myList.add(myMan);
            } else if (readString[0].toLowerCase().equals("woman")) {
                Woman myWoman = new Woman(myPoint, Integer.parseInt(readString[3]), Integer.parseInt(readString[4]), readString[5]);
                this.myList.add(myWoman);
            } else {
                inFile.close();
                throw new IllegalArgumentException();
            }
        }
        inFile.close();
    }

我知道这不是完美的,我还在学习。然而,在这里应该可以使用trim()函数...

我的输入文件是:

man, 300, 200, 3, 2, Bill

如果我把修剪过的字符串拼接在一起,应该得到:

man30020032Bill

但是我得到了以下结果:
man 300 200 3 2 Bill

我不知道为什么。有人可以帮忙吗?

你试过使用调试器了吗? - constantlearner
字符串是不可变的。 - SLaks
关于字符串不可变性,下面这篇文章值得一读:https://en.wikipedia.org/wiki/Immutable_object#Java - BlackVegetable
谢谢大家,我感觉很愚蠢...非常感谢你们快速而完美的回答! - JesseWoodring
@JesseWoodring 不要感到愚蠢,当你开始学习Java时,这是一个容易犯的错误。事实是,你的问题很好地表达了出来--它展示了你尝试过什么,清晰地陈述了问题/疑问,没有充斥着错误的代码,并且你接受了一个答案。欢迎来到Stack Overflow。 - BlackVegetable
4个回答

9

字符串是不可变的。例如:

myString.trim(); 

创建并返回一个新的修剪过的字符串,但不会对myString所引用的原始字符串做任何更改。由于新的字符串从未被分配给变量,因此它将悬空并最终被垃圾回收。要获取和使用修剪后的字符串,必须将结果分配给变量,例如原始变量(如果需要):

myString = myString.trim(); 

所以在您的情况下:
readString[i] = readString[i].trim();

6

更改

for (int i = 0; i < readString.length; i++) {
    readString[i].trim();
}

to

 for (int i = 0; i < readString.length; i++) {
     readString[i] =  readString[i].trim();
 }

由于 String 对象是不可变的,因此 trim() 方法返回一个新实例,您必须将其分配给数组。

6

字符串是不可变的,因此它不会改变String的内容:

readString[i].trim();

它返回更改后的值。试试看

readString[i] = readString[i].trim();

4

Java中的字符串是不可变的(它们永远不会改变)。例如,'trim()'返回新值,而不更新当前值。

尝试:

readString[i] = readString[i].trim()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接