Java - String.lastIndexOf(str)逻辑我无法理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java - String.lastIndexOf(str)逻辑我无法理解相关的知识,希望对你有一定的参考价值。

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

System.out.println("abc		subdir".lastIndexOf("	"));
System.out.println("abct	subdir".lastIndexOf("	"));
答案

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

字符串1

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

字符串2

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

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

另一答案

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

在第二行中,最后一个标签位于4也是a b c t <tab>

算作1个字符

另一答案

这是因为 不算作两个字符,它是一个转义序列,只计算一个字符。

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

另一答案

重要的是要注意计数从零开始,' t'仅计为一个字符。这有时会让人感到困惑,特别是如果你忘记从零开始。

0|1|2| 3| 4
a|b|c|	|	
a|b|c| t|	
另一答案

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

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

以上是关于Java - String.lastIndexOf(str)逻辑我无法理解的主要内容,如果未能解决你的问题,请参考以下文章

c# 怎样获取string的某个字符最后一位的位置!

JavaSE8基础 String lastIndexOf 反向查找 返回字符在字符串中第一次出现时的索引值

String 常用方法

使用 T-SQL 查找子字符串最后一次出现的索引

Java Switch

Java Math