3

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

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

5 回答 5

10

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

字符串 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)

在 Java中有一些特殊字符应该被\(tab \t, breadline \n, quote \"...) 转义,所以它算作一个字符而不是 2

于 2018-08-23T20:04:51.460 回答
4

在第一行中,最后一个选项卡位于 4 a b c <tab> <tab>

在第二行中,最后一个选项卡也在 4 a b c t <tab>

\t计为 1 个字符

于 2018-08-23T20:00:30.927 回答
3

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

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

于 2018-08-23T20:03:50.447 回答
2

需要注意的是,计数从零开始,'\t' 仅计为一个字符。有时这可能会令人困惑,尤其是如果您忘记从零开始。

0|1|2| 3| 4
a|b|c|\t|\t
a|b|c| t|\t
于 2018-08-23T20:08:34.463 回答
0

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
于 2018-08-23T21:15:13.167 回答