Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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_Character - Fatal编程技术网

Java 删除“;“空的”;字符串中的字符

Java 删除“;“空的”;字符串中的字符,java,character,Java,Character,我正在使用一个framwork,它会不时返回带有“空”字符的格式错误的字符串 例如,“foobar”表示为: [,f,o,o,b,a,r] 第一个字符不是空格(“”),因此System.out.printlin()将返回“foobar”而不是“foobar”。然而,字符串的长度是7而不是6。显然,这使得大多数字符串方法(equals、split、substring等)毫无用处。有没有办法从字符串中删除空字符 我尝试构建一个新字符串,如下所示: StringBuilder sb = new Str

我正在使用一个framwork,它会不时返回带有“空”字符的格式错误的字符串

例如,“foobar”表示为: [,f,o,o,b,a,r]

第一个字符不是空格(“”),因此System.out.printlin()将返回“foobar”而不是“foobar”。然而,字符串的长度是7而不是6。显然,这使得大多数字符串方法(equals、split、substring等)毫无用处。有没有办法从字符串中删除空字符

我尝试构建一个新字符串,如下所示:

StringBuilder sb = new StringBuilder();
for (final char character : malformedString.toCharArray()) {
  if (Character.isDefined(character)) {
    sb.append(character);
  }
}
sb.toString();
   if (character == ''){
     //
   }
if (character.equals(' ')){ // }
不幸的是,这不起作用。与以下代码相同:

StringBuilder sb = new StringBuilder();
for (final Character character : malformedString.toCharArray()) {
  if (character != null) {
    sb.append(character);
  }
}
sb.toString();
我也无法检查这样的空字符:

StringBuilder sb = new StringBuilder();
for (final char character : malformedString.toCharArray()) {
  if (Character.isDefined(character)) {
    sb.append(character);
  }
}
sb.toString();
   if (character == ''){
     //
   }
if (character.equals(' ')){ // }
很明显,这根绳子有毛病。。但是我不能改变我正在使用的框架,也不能等待他们修复它(如果它是他们框架中的一个bug)。我需要处理这个字符串并对其进行sanatize


有什么想法吗?

向左或向右修剪会删除空白。空格前有冒号吗

更重要的是: a=(长)字符串[0];将向您显示字符代码,您可以使用replace()或substring。

它可能是由
\0
表示的。你可以把它扔掉

要确定确切的代码点,请执行以下操作:

for (char c : string.toCharArray()) {
    System.out.printf("U+%04x ", (int) c);
}
然后你可以找到确切的字符


更新:根据更新:

有人知道一种只包含一个有效字符范围而不排除95%UTF8范围的方法吗

你可以在正则表达式的帮助下做到这一点。请参见@Polygene润滑剂的答案


另一方面,您也可以从根本上解决问题,而不是解决问题。要么更新文件以去除BOM标记,这是一种将UTF-8文件与如今毫无价值的其他文件区分开来的传统方法,要么使用识别和跳过BOM的
读取器。另请参见。

您可以像这样检查空白:

StringBuilder sb = new StringBuilder();
for (final char character : malformedString.toCharArray()) {
  if (Character.isDefined(character)) {
    sb.append(character);
  }
}
sb.toString();
   if (character == ''){
     //
   }
if (character.equals(' ')){ // }

谢谢你,约翰·勒塞尔。实际上是“\uFEFF”

以下代码起作用:

 final StringBuilder sb = new StringBuilder();
    for (final char character : body.toCharArray()) {
       if (character != '\uFEFF') {
          sb.append(character);
       }
     }  
 final String sanitzedString = sb.toString();

任何人都知道一种只包含一个有效字符范围而不排除95%UTF8范围的方法吗?

在这种情况下,正则表达式将是一种适当的方法来清除字符串中不需要的Unicode字符

String sanitized = dirty.replaceAll("[\uFEFF-\uFFFF]", ""); 
这将用空字符串替换
\uFEFF-\uFFFF
范围内的所有
字符

[…]
构造称为字符类,例如,
[aeiou]
匹配任何小写元音,
[^aeiou]
匹配任何不匹配的内容

您可以使用以下两种方法之一:

  • replaceAll(“[
    黑名单”
    ]”,简称“)
  • replaceAll(“[^
    白名单”
    ][code>”,”)
工具书类
用于(int i=0;i
从字符串中删除UTF-8 BOM的一种非常简单的方法,使用Denis Tulskiy建议的子字符串。不需要循环。只需检查第一个字符的标记,并在需要时跳过它

public static String removeUTF8BOM(String s) {
    if (s.startsWith("\uFEFF")) {
        s = s.substring(1);
    }
    return s;
}

当使用ApacheHttpClient EntityUtil从Web服务器读取时,我需要将其添加到代码中。WebServer没有发送空白标记,但它在读取输入流时被拉入。可以找到原始文章。

这就是我的工作原理:-

    StringBuilder sb = new StringBuilder();
    for (char character : myString.toCharArray()) {
        int i = (int) character;
        if (i > 0 && i <= 256) {
            sb.append(character);
        }
    }  
    return sb.toString();
StringBuilder sb=新建StringBuilder();
for(字符:myString.toCharArray()){
int i=(int)字符;

如果(i>0&&iSimply格式错误的字符串.trim()就能解决问题。

那是什么?试着写出每个字符的unicode编号(只需将字符转换为int)。这可能是一个U+FEFF字符吗?那么它可能是存储为UTF-*的文件中的字节顺序标记。问题已经确定该字符不是空格。问题确实说明它不是空格;但是,在给出的三个代码示例中,他使用比较运算符检查字符,如果我没有弄错,您可以不能使用比较运算符来检查某个字符,因为它们检查的是您是否引用了内存中的同一位置而不是字符代码。根据提供的代码,这只是一个有用的建议/选项。我知道您的来源-对于字符对象,使用equals()是正确的做法。在处理哪些字符时,我倾向于使用chars,并且可以使用==字符,因为它是一种基本类型。然后应该更精确地定义“有效字符”。这是低效的,只需检查第一个字符是否为FEFF并使用子字符串,
String.trim()
将完成其余部分。感谢您指出这一点,您为我节省了很多时间:-)不,没有:
“\uFEFFTYPE.trim().equals(“\uFEFFTYPE”)