【问题标题】:Java - String.lastIndexOf(str) logic I cannot understandJava - 我无法理解的 String.lastIndexOf(str) 逻辑
【发布时间】:2019-01-30 06:46:34
【问题描述】:

我使用两个不同的字符串来测试“\t”的最后一个索引,但它们都返回 4。我认为应该是 5 和 4。我检查了 oracle 文档,但我不明白为什么。有人可以告诉我为什么吗?谢谢!

System.out.println("abc\t\tsubdir".lastIndexOf("\t"));
System.out.println("abct\tsubdir".lastIndexOf("\t"));

【问题讨论】:

标签: java string indexing lastindexof


【解决方案1】:

让索引的数量更好地理解它:

字符串 1

a b c \t \t s u b d i r
0 1 2  3  4 5 6 7 8 9 10
          ^-----------------------------------last index of \t (for that you get 4)

字符串 2

a b c t \t s u b d i r
0 1 2 3  4 5 6 7 8 9 10
         ^-----------------------------------last index of \t (for that you get 4)

有一些特殊字符应该被\ 转义(制表符\t,面包线\n,引号\" ...)在Java中,所以它算作一个字符而不是2个

【讨论】:

    【解决方案2】:

    在第一行,最后一个标签在 4 a b c <tab> <tab>

    在第二行,最后一个制表符也在 4 a b c t <tab>

    \t 计为 1 个字符

    【讨论】:

      【解决方案3】:

      这是因为\t 不计为两个字符,它是一个转义序列并且仅计为一个字符。

      您可以在此处找到完整的转义序列列表:https://docs.oracle.com/javase/tutorial/java/data/characters.html

      【讨论】:

        【解决方案4】:

        请注意,计数从零开始,'\t' 仅计为一个字符。这有时会令人困惑,特别是如果您忘记从零开始。

        0|1|2| 3| 4
        a|b|c|\t|\t
        a|b|c| t|\t
        

        【讨论】:

        • 当我开始输入我的答案时,这个答案并不存在,我已经编辑了我的答案以反映它。谢谢!
        【解决方案5】:

        在 java 中计数从零开始,这就是为什么 first 和 sysout 返回 4。为了您更好地理解,我添加了第三个 sysout,您可以在其中找到 \t 的最后一个索引将返回零。

        /**
         * @author itsection
         */
        public class LastIndexOf {
            public static void main(String[] args) {
                System.out.println("abc\t\tsubdir".lastIndexOf("\t"));
                System.out.println("abct\tsubdir".lastIndexOf("\t"));
                System.out.println("\tabctsubdir".lastIndexOf("\t"));
            }
        }// the output will be 4,4,0
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-18
          相关资源
          最近更新 更多