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

时间:2018-08-23 19:56:10

标签: java string indexing lastindexof

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

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

5 个答案:

答案 0 :(得分:8)

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

字符串1

var content = document.getElementById('content'),
    save    = document.getElementById('save'),
    output  = '<ul>',
    animals = [{
      name: 'bob',
      type: 'dog'
    }, {
      name: 'fred',
      type: 'lizard'
    }];

// set on load for testing
localStorage.setItem('animals', JSON.stringify(animals));

// grab localStorage data on click and create a list
save.addEventListener('click', function() {
    var ls = JSON.parse(localStorage.getItem('animals'));  
    for (var i = 0; i < ls.length; i++) {
      output += '<li>' + ls[i].name + ', ' + ls[i].type + '</li>';
    }

  output += '</ul>';
  content.innerHTML = output;
});

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

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

答案 1 :(得分:4)

第一行的最后一个标签位于4 a b c <tab> <tab>

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

\t算作1个字符

答案 2 :(得分:3)

这是因为\t不算作两个字符,而是一个转义序列,只算一个字符。

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

答案 3 :(得分:2)

请务必注意,计数从零开始,'\ t'仅计为一个字符。有时这会造成混乱,尤其是如果您忘记从零开始。

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

答案 4 :(得分: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