java - 在长 java 字符串中查找行号和列号

标签 java string

在 Java 中,给定一个多行字符串和该字符串中的字符索引(例如 matcher.start() 调用的结果),在字符串中查找该字符索引的行号和列号的最有效方法是什么?

例如

String s = "abc\ndef\nghi\n";
int i = 5; // i.e. the e character (since we start at 0 and count newlines)

// Do something

System.out.println("Line: " + line + " Column: " + column);

应该产生

Line: 2 Column 2

我为此继承的代码使用 s.substring(p) 获取字符串的前缀直到字符索引,在换行符上拆分它,然后计算拆分返回的行数,以及 split 返回的最终数组元素中的字符数。这工作正常,但随着前缀变长而变慢(我想在一个紧密的循环中使用它)。

最佳答案

当您可以迭代原始字符串并避免任何对象分配时,为什么需要使用子字符串并生成新字符串并对片段进行标记?

int c = 1;
int line = 1, col = 1;
while (c <= i) 
{
  if (string.charAt(c) == '\n')
  {
    ++line;
    col = 1;
  } else {
    ++col;
  }
}

关于java - 在长 java 字符串中查找行号和列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24731649/

相关文章:

java - 如果操作系统不属于给定系列(例如 mac),如何激活 pom.xml?

java - 从 pfx 文件生成的 JAVA jks keystore 问题

java - 如何使用其属性查找 DOM 节点

java - Spring Security中如何使用@PathVariable解析参数名?

java - 正则表达式java从属性中读取

php - 如何从文本区域在 div 中显示 latex 代码?

java - 如何打印带有零填充的字符串?

java - 我如何等待进程完成

Java 用 2 个分隔符分割字符串

python - 如何从字符串列表中的每个字符串中删除最后一个字符