【问题标题】:JAVA trim() not working [duplicate]JAVA修剪()不起作用[重复]
【发布时间】:2013-11-18 17:46:30
【问题描述】:

这是我所拥有的:

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

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

【问题讨论】:

  • 你用调试器试过了吗?
  • 字符串是不可变的。
  • 关于字符串不变性,以下内容值得一读:en.wikipedia.org/wiki/Immutable_object#Java
  • 谢谢大家,我觉得自己很愚蠢......感谢快速而完美的答案!
  • @JesseWoodring 不要觉得自己很愚蠢,这是从 Java 开始时很容易遇到的错误。事实是,您的问题格式正确——它显示了您的尝试,清楚地说明了问题/问题,没有充满错误的代码,并且您接受了答案。欢迎使用 Stack Overflow。

标签: java trim


【解决方案1】:

字符串是不可变的。这个:

myString.trim(); 

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

myString = myString.trim(); 

所以在你的情况下:

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

【讨论】:

    【解决方案2】:

    改变

    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() 方法返回一个您必须分配给数组的新实例。

    【讨论】:

      【解决方案3】:

      字符串是不可变的,所以这不会改变String的内容:

      readString[i].trim();
      

      它返回更改后的值。试试

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

      【讨论】:

        【解决方案4】:

        Java 中的字符串是不可变的(它们永远不会改变)。 'trim()' 之类的东西会返回新值,并且不会更新当前值。

        试试:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多