为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式不检测空格

正则表达式不检测空格

有只小跳蛙 2022-01-12 09:56:28
我从一个YouTube我复制的频道订阅了一些订阅。是"4 372 236"。我正在https://regex101.com"\s+"上测试该数字的正则表达式,但它不起作用。当我自己写相同的数字时,正则表达式确实有效。有谁知道怎么回事?。我正在尝试从这些数字中删除空格字符,但我做不到。我也尝试了该.replaceAll(" ", "")方法,但也不起作用。然后我JSON library用来获取这样的订阅:JSONObject jsonObject = new JSONObject();    jsonObject = new JSONObject(content);    JSONArray tabs = jsonObject.getJSONObject("contents")            .getJSONObject("twoColumnBrowseResultsRenderer")            .getJSONArray("tabs");    JSONObject tabRenderer = tabs.getJSONObject(5).getJSONObject("tabRenderer");    JSONObject sectionListRenderer = tabRenderer.getJSONObject("content").getJSONObject("sectionListRenderer");    JSONArray contents2 = sectionListRenderer.getJSONArray("contents");    JSONObject itemSectionRenderer = contents2.getJSONObject(0).getJSONObject("itemSectionRenderer").getJSONArray("contents").getJSONObject(0);    JSONObject channelAboutFullMetadataRenderer = itemSectionRenderer.getJSONObject("channelAboutFullMetadataRenderer");    String subs = channelAboutFullMetadataRenderer.getJSONObject("subscriberCountText").getJSONArray("runs").getJSONObject(0).getString("text");最后,我使用regex删除数字中的空格:subs = subs.replaceAll("\\s+", "");System.out.println(subs);我也试过这个,但它不起作用。我认为这不是一个常规空间,但我不知道如何识别它。 subs = subs.replaceAll(" ", "");
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

好的,伙计们,我发现了。这不是为什么 String.replace 不起作用的重复. 我一直认为 Java 中的字符串是不可变的。

数字之间没有简单的空格。这是无间断空间' (U+00A0)。所以,正则表达式应该是这样的

 subs = subs.replaceAll("[\\u202F\\u00A0]", "");

也许它会在未来帮助某人:) 谢谢@metters


查看完整回答
反对 回复 2022-01-12
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我建议您将该数字复制到记事本++ 中并使用“显示所有符号”选项。也许之间不仅有空格。


//img1.sycdn.imooc.com//61de35880001f1b807630443.jpg

编辑:很抱歉没有使用评论功能,我需要声誉,这很糟糕。


查看完整回答
反对 回复 2022-01-12
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

您需要转义反斜杠:

System.out.println("4 372 236".replaceAll("\\s+", ""));

打印:4372236


查看完整回答
反对 回复 2022-01-12
  • 3 回答
  • 0 关注
  • 299 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号