这就是我所拥有的:
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
我不知道为什么。有人可以帮忙吗?
答案 0 :(得分:9)
字符串是不可变的。这样:
myString.trim();
创建并返回一个新修剪的String,但对myString引用的原始String不执行任何操作。由于新的String永远不会分配给变量,因此它会挂起并最终被垃圾回收。要获取和使用修剪过的String,必须将结果分配给变量,例如原始变量(如果需要):
myString = myString.trim();
所以在你的情况下:
readString[i] = readString[i].trim();
答案 1 :(得分:6)
更改
for (int i = 0; i < readString.length; i++) {
readString[i].trim();
}
到
for (int i = 0; i < readString.length; i++) {
readString[i] = readString[i].trim();
}
因为String对象是不可变的,因此trim()
方法返回一个必须分配给数组的新实例。
答案 2 :(得分:6)
字符串是不可变的,因此这不会改变String
:
readString[i].trim();
返回更改的值。尝试
readString[i] = readString[i].trim();
答案 3 :(得分:4)
Java中的字符串是不可变的(它们永远不会改变)。像'trim()'这样的东西会返回新值,而不会更新当前值。
尝试:
readString[i] = readString[i].trim()