【问题标题】:Java string comparisions/quotationsJava 字符串比较/引用
【发布时间】:2010-07-14 17:10:25
【问题描述】:

我的问题是比较两个对象和它们返回的字符串(通过 getter 访问)。

对象一解析 csv 文件中的日期,当通过 exampleObject.getDateTime() 打印出来时返回字符串:“2010-03-26-10-54-06.471000”

对象二的日期时间字符串由用户设置。当我将对象二上的 dateTime 设置为与 objectOne 相同然后执行 exampleObjectTwo.getDateTime() 时,它返回 2010-03-26-10-54-06.471000

所以主要区别在于一个字符串在解析csv时有引号(不包含引号),而返回时用户设置的字符串没有引号!

如果有人能解释为什么会发生这种情况,我将不胜感激!

非常感谢!


        BufferedReader input = new BufferedReader(new FileReader(file));

        try {
            String line = null; 
            while ((line = input.readLine()) != null) {
                SearchResult searchResult = new SearchResult();

                if (!line.contains("Date")) {
                    String[] split = line.split(",");
                    SearchResult.setDateTime(split[0]);
                    SearchResults.add(SearchResult);
                }

            }
        } finally {
            input.close();
        }
    } catch (IOException ex) {
        ex.printStackTrace();
    }

edit 上面是用于解析 csv 文件的代码。我检查了,csv文件不包含任何引号。

感谢您的快速而有帮助的回复!

【问题讨论】:

  • 信息不足。问题在于对象的实现,如果没有看到它们的源代码,我们甚至无法猜测。

标签: java csv string comparison object


【解决方案1】:

您需要修改/配置 CSV 解析器以删除引号。

如果它是一个自制的 CSV 解析器,这样做应该足以摆脱周围的双引号:

field = field.replaceAll("^\"|\"$", "");

如果它是第 3 方 API,那么您需要查阅其文档(或在此处提及库名称,以便愿意这样做的人可以为您查找文档)。

另见:

【讨论】:

  • 在逗号上分割也是一个坏主意。可能有引用的字段又包含逗号,例如"field1","fie,ld2","fie""ld3" 是合法有效的 CSV 行,应解析为 field1fie,ld2fie"ld3。再次检查我提供的链接以获得一个好的解析器示例。
  • 哎呀错过了那个链接!!再次感谢
【解决方案2】:

再次检查您是如何执行 csv 解析的。

或从字符串中删除引号:

String newDate  = oldString.replaceAll("\""," ").trim();

【讨论】:

  • 这会删除 all 双引号。作为一般解决方案,这有点激烈。 CSV 字段反过来也可以包含合法的双引号。
  • 他应该在调用后使用这一行: String oldString = exampleObject.getDateTime() ;并且 getDateTime 的所有返回值都不包含双引号。
猜你喜欢
  • 2014-11-11
  • 2012-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
相关资源
最近更新 更多