首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

Java 正则的一个问题

  •  
  •   xjn17858906105 · 43 天前 · 1498 次点击
    这是一个创建于 43 天前的主题,其中的信息可能已经有所发展或是发生改变。

    String str = "3\r123u99"; String reg = ".\r.";

    Matcher m1 = Pattern.compile(reg).matcher(str); while (m1.find()) { System.out.println(m1.group()); }

    刚接触正则,这段正则的匹配结果让我不解啊

    10 回复  |  直到 2019-10-28 09:18:03 +08:00
        1
    dallaslu   43 天前
    那么匹配结果是什么,以及你觉得应该是什么呢?
        2
    xjn17858906105   43 天前
    @dallaslu 我觉得应该是
    ************
    3

    1
    ************
    可是输出的结果是
    ************
    1
    ************
        3
    chengyiqun   43 天前
    你是在 windows 平台测试的吗?
        4
    xjn17858906105   43 天前
    @chengyiqun 我是在 mac 上测试的,用 idea,在控制台上打印
        5
    xjn17858906105   43 天前
    刚刚 stackoverflow 上的老兄是这么回答的 https://stackoverflow.com/a/58577737/8432118
        6
    QiuSe   43 天前   ♥ 1
    @xjn17858906105 这个解释不是很好吗?
    如果你想输出你要的结果,String str = "3\n123u99"; String reg = ".\n.";就是你要的。
    想知道为什么\r 不行, 你只需要在 main 方法里写 System.out.println("ww3\r123u99"),不写其他的代码,这个是控制台的规定吧。
        7
    ipwx   43 天前 via Android
    因为控制台里面 \r 等于回到行首重新开始输出啊。不信你 replace \r 为 \\r
        8
    szq8014   43 天前   ♥ 3
    你遇到了著名的文件换行符问题。
    \r\n 分别是把光标挪到行首与换行。
    只写\r 就只是把兴标挪到了行首,输出的字符会覆盖原来的,用这个特性可以做控制台的基于字符的下载进度条。
    按照标准来的话,只写 \n 效果应该是
    12345
    _____67890
    这样的,不过不会这样的
        9
    m1ch3ng   43 天前
    匹配的是 3\r1,然后因为是 syso 输出,遇到\r 会光标移到行首,所以输出 1 ?
        10
    xjn17858906105   42 天前 via Android
    @m1ch3ng 是的,我试验过了,也确实如此
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   952 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 22:34 · PVG 06:34 · LAX 14:34 · JFK 17:34
    ♥ Do have faith in what you're doing.