【问题标题】:How to remove invisible [ZWSP] from string in Java如何从Java中的字符串中删除不可见的[ZWSP]
【发布时间】:2022-07-07 23:09:09
【问题描述】:

我从一些数据库查询中收到了一个字符串(假设 str)。 str = "+Aa​+Bk​+Bo​+Ac​+Lc​"; 但是如果将相同的字符串复制到intelliJ,它会在str中显示不可见的字符

我必须将此字符串(即str)拆分为String[],然后拆分为List。 并在 splatted Array 和转换后的 List 中获取 this[ZWSP]。 还尝试了一些/以下技术来修剪和删除它,但没有奏效。

        String str = "+Aa​+Bk​+Bo​+Ac​+Lc​";
        String[] strArr = str.split("\\+");

        List<String> splitStrList = Arrays.stream(str.split("\\+"))
                .map(String::trim)
                .collect(Collectors.toList());

---方法2

        String[] array2 = Arrays.stream(strArr).map(String::trim).toArray(String[]::new);
       
        String[] trimmedArray = new String[array2.length];

        for (int i = 0; i < array2.length; i++) {
            trimmedArray[i] = array2[i].trim();
        }
        List<String> trimmedArrayList = Arrays.asList(trimmedArray);

还有一些其他方法,但是在将输出复制到 intelliJ IDE 时看到那些 [ZWSP] 特殊字符。 这会在进一步处理中产生问题。

如何删除这些 spcl 字符,即 [ZWSP] 以获取类似列表/数组 [, Aa​, Bk​, Bo​, Ac​, Lc​]

将感谢所有针对此问题的建议/解决方案。

【问题讨论】:

  • 它被称为zero-width space,正则表达式的空白捕获将抓住它们:String[] strArr = str.split("\\s+")(注意您的正则表达式中缺少的s)。
  • @Rogue ("\\s+") 也不起作用,它删除了可用的字符以及创建长度为 1 的列表。

标签: java arrays arraylist


【解决方案1】:

@Rogue 提到的那个角色叫做zero-width space。您可以使用 unicode 字符将其删除:

str.replaceAll("\u200B", "");

或者你可以像这样拆分字符串:

str.split("\\+\u200B");

然后根据需要处理数组。

见: https://www.fileformat.info/info/unicode/char/200b/index.htm

【讨论】:

    【解决方案2】:

    正如其他用户所说,我尝试了上述解决方案

    String str = "+Aa​+Bk​+Bo​+Ac​+Lc​";
        String[] strArr = str.split("\u200B");
    

    输出:[+Aa, +Bk, +Bo, +Ac, +Lc]

     String str = "+Aa​+Bk​+Bo​+Ac​+Lc​";
        String[] strArr = str.split("\\+\u200B");
        System.out.println(Arrays.asList(strArr));
    

    输出:[+Aa​+Bk​+Bo​+Ac​+Lc​]

    【讨论】:

      猜你喜欢
      • 2015-12-17
      • 2011-07-15
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      相关资源
      最近更新 更多