Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串实例中删除空白字符_Java_Regex_String_Trim - Fatal编程技术网

Java 从字符串实例中删除空白字符

Java 从字符串实例中删除空白字符,java,regex,string,trim,Java,Regex,String,Trim,有没有其他方法可以从字符串中删除空白字符 1) 据我所知,其他 myString.trim() Pattern.compile("\\s"); 2) 当我使用时,是否还有其他原因搜索/寻找另一个/不同的方法?您只需使用myString.replaceAll(“\\s”,“”“)。但是: 请注意有关unicode空白的注释 以上内容将删除换行符。如果不希望删除换行符,请将其从正则表达式中排除 字符串。替换(“,”) (2) 也许为了性能调整,除此之外,我不知道Trim会删除ascii0和as

有没有其他方法可以从字符串中删除空白字符

1) 据我所知,其他

myString.trim()

Pattern.compile("\\s");

2) 当我使用

时,是否还有其他原因搜索/寻找另一个/不同的方法?您只需使用
myString.replaceAll(“\\s”,“”“)
。但是:

  • 请注意有关unicode空白的注释
  • 以上内容将删除换行符。如果不希望删除换行符,请将其从正则表达式中排除
    • 字符串。替换(“,”)


      (2) 也许为了性能调整,除此之外,我不知道Trim会删除ascii0和ascii32之间的前导字符和尾随字符。这会删除大多数ASCII空白,但也会删除所有控制字符。它也不会在字符串中移除它们

      for(int i=Character.MIN_CODE_POINT;i<=Character.MAX_CODE_POINT;i++)
        if(Character.isWhitespace(i))
          System.out.println(i);
      
      for(int i=Character.MIN\u code\u POINT;i有一个预配置的for。它也可以与unicode一起使用

      示例用法:

      System.out.println(CharMatcher.whitespace().removeFrom("H \ne\tl\u200al \to   "));
      
      输出:

      System.out.println(CharMatcher.whitespace().removeFrom("H \ne\tl\u200al \to   "));
      
      你好

      CharMatcher还有许多其他不错的功能,我最喜欢的功能之一是该方法,它用一个字符替换多个出现:

      System.out.println(
          CharMatcher.whitespace().collapseFrom("H \ne\tl\u200al \to   ", '*'));
      
      输出:

      System.out.println(CharMatcher.whitespace().removeFrom("H \ne\tl\u200al \to   "));
      
      你好*


      继续寻找不同技术的原因是要找到一种能满足您真正需要的技术。例如,
      trim()
      只删除字符串开头和结尾的空格。要使用正则表达式获得相同的效果,您必须执行以下操作:

      s = s.replaceAll("^\\s+|\\s+$", "");
      
      然后是删除哪些字符的问题。在Java 7之前,
      \s
      只匹配ASCII空白字符,即:

      "[\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020]"
      
      …而(正如Peter所观察到的)
      trim()
      简单地删除了代码点32处或以下的所有字符(
      U+0020
      ,采用Unicode表示法)。我怀疑这里的想法是,其他字符无论如何都不太可能出现在字符串中,如果它们出现了,您可能希望将它们删除。(不管怎么说,这对我很管用。☺) 但这是您应该注意的。下面的一些代码演示了
      trim()
      和正则表达式方法之间的区别:

      String s = "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007"
               + "\u0008\u0009\n\u000B\u000C\r\u000E\u000F"
               + "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017"
               + "\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F"
               + "\u0020\u00A0";
      System.out.println(s.length());
      System.out.println(s.trim().length());
      System.out.println(s.replaceAll("\\s", "").length());
      
      输出:

      34
      1
      28
      
      第二行输出中剩下的一个字符是不间断空格(
      U+00A0
      ,或“NBSP”),一旦超出ASCII范围,就会有更多的空白字符,但最有可能遇到的是NBSP.
      trim()
      也不是正则表达式将其删除,但请注意当您将最后一行代码更改为以下内容时会发生什么:

      System.out.println(s.replaceAll("(?U)\\s", "").length());
      
      …并在Java 7下运行:

      34
      1
      27
      
      通过添加
      (?U)
      ,我打开了
      UNICODE\U CHARACTER\U CLASSES
      模式,正如@tchrist在他的评论中所提到的。NBSP是一个空白字符,不管
      CHARACTER.isWhitespace()
      怎么说,但这并不意味着你总是想在空白匹配中包含它。这就是为什么番石榴(由@Sean提到)还包括一个字符匹配器


      总之,要选择正确的删除空白的工具,您需要确切地知道要删除哪些空白字符,以及要从何处删除这些字符。这并不复杂,但不像
      trim()这样的遗留工具那么简单
      和StringTokenizer也假装是这样。

      我将一些代码从C#重新键入Java-我需要模拟XmlNode.OuterXml和XmlNode.InnerXml。为此,我使用了Transformer,但出于某种原因,即使关闭缩进,它也无法正确识别一些空白。因此,我的另一个选择是对字符串进行后处理使用以下两个等效调用之一,通过正则表达式生成回车、换行和制表符:

      string.replaceAll("[\t\n\b\r\f]+ *", "");   
      string.replaceAll("[\\s+ *", "");
      

      这两种方法都可以删除字符串和制表符中的任何空格。希望它至少有一点相关性。第二种方法可能是更好的选择

      您应该编写文字字符类;Java 1.7之前的
      UNICODE\u字符类
      标志对于UNICODE空格是无效的。@tchrist,您的意思是“…
      \s
      坏了…”?@Alan:对不起,它没有像
      \xA0
      这样的东西。我最近看到很多这样的东西。@tchrist:不,我的意思是你的评论中似乎有一个打字错误;“
      \s
      “不见了。@Alan:Ug你说得对。我不敢相信人类的思维倾向于看到它认为它看到的东西,而不是它在那里。
      控制字符
      你是指行分隔符,EOF…,这个区域真的不是我喜欢的Java+1我的意思是^A,^B,^C到^W,^Y,^Z^[,^,^,^],^^^和^-+1这是Java中删除我们不需要的字符的最简单的方法。请注意,在代码中,您只删除了前导字符和尾随字符(请参见)是正确的,但出于效率原因,您可能需要使用
      myString.replaceAll(“\\s+”,”)
      (注意+号)如果您有任何字符串包含大量串联的空白字符。正如我所看到的,我的问题的所有答案与我假设的方向不同,…我非常感谢您将所有答案放在一起,现在只有+1
      CharMatcher.WHITESPACE
      从Guava 20.0开始就不推荐使用,
      CharMatcher.WHITESPACE()
      是替代品。