【问题标题】:Why does a String returned from a HashMap not match although it is identical to System.out?为什么从 HashMap 返回的字符串与 System.out 相同,却不匹配?
【发布时间】:2014-10-29 21:50:55
【问题描述】:

跟进this Q&A

目的是匹配一个String,通过以下方法返回:

public String getAssignment() {
    return (String) hashmap.get("assignment");
}

尝试

如下:

String s = "12345";
System.out.println(s.matches("12345"));

结果是一场比赛,想法是:

System.out.println(assignment.getAssignment());
System.out.println(assignment.getAssignment().length());
System.out.println(assignment.getAssignment().matches("11111"));
System.out.println(assignment.getAssignment().equals("11111"));
System.out.println(assignment.getAssignment().trim().length());

也应该返回true

结果

System.out 11111
System.out 15
System.out false
System.out false
System.out 13

【问题讨论】:

  • 为我工作。你能做一个可复制的例子吗?
  • @aruisdante 是的,11111 根据 System.out 返回
  • assignment.getAssignment() 的返回值很可能包含一些在sout 中不可见的whitespace,但在没有这些空格的情况下会使字符串与11111 不匹配。使用调试器并检查assignment.getAssignment() 的返回值或检查字符串的length
  • @user2336315 我应该包含 HashMap 吗?
  • 如果您只是想检查一个值是否等于 到某个常数,请使用.equals().matches() 用于正则表达式匹配,这对于检查简单的字符串文字是不必要的。

标签: java string match


【解决方案1】:

很可能,值后面有“不可见”字符(空格) - 在测试值之前调用 trim()

此外,您的支票不需要正则表达式,因此只需使用 .equals() 而不是 .matches()

试试这个:

assignment.getAssignment().trim().equals("11111")

编辑

您似乎有 嵌入 空格 - 没问题。要从值中的任何位置删除 all 空格,请使用 replaceAll()(用于基于正则表达式的替换):

assignment.getAssignment().replaceAll("\\s", "").equals("11111")

【讨论】:

  • 感谢您发布答案。使用 trim 将字符串的长度从 15 个字符减少到 13 个字符。预期trim 会产生 5 个字符。我会继续调试字符串。
  • @utrecht 如果您想了解它可能发生的事情的一些提示,您可以使用以下怪物以明确的 base64 打印出来,任何人都可以查看而不会丢失信息:System.out.println(javax.xml.bind.DatatypeConverter.printBase64Binary(assignment.getAssignment().getBytes(java.nio.charset.Charset.forName("UTF-8"))));跨度>
  • 或者更简单的可以给你字符代码的东西:for ( char ch : assignment.getAssignment().toCharArray() ) System.out.printf("%x%n",(int)ch);
  • @RealSkeptic 结果是:9
  • @RealSkeptic 我迷路了。当我运行代码时,输​​出为:1111131993199319、@987654340 987654341@、993199
猜你喜欢
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多