如何获取字符串中行的起始位置和结束位置

时间:2014-06-09 09:42:31

标签: java

我有一个包含多行的文本,我将行号作为输入现在我想拥有该行的起始位置和结束位置,这是我已经做过的但它不起作用:

        private int[] getPos(int line) {
            String[] lines = textArea.getText().split(System.getProperty("line.separator"));
            int i=0;
            int pos = 0;
            while( i < lines.length){
                if(i==line)
                    break;
                pos = pos+lines[i].length();

                i++;
            }

            int[] s = {pos,pos+lines[i].length()};
            return s;
        }

文字示例:

line1
line2
line3

我想用结果来突出显示这一行:

textArea.getHighlighter().addHighlight(startPos, endPos,highlightPainter);

3 个答案:

答案 0 :(得分:2)

jText.getText().indexOf( lines[i] )

这将为您提供起始位置。添加行长度即可结束。

干杯

编辑:如果有重复的行,你可能需要稍微调整一下代码,以获得它找到的第一行或最后一行。

答案 1 :(得分:1)

如果要提取子字符串的第一个实例(或确定只有一个),可以使用.indexOf(String str)方法:

String foo = "foo bar";
String toLookUp = "bar";
int initialPosition = foo.indexOf(toLookUp);
System.out.println("Initial Position: " + initialPosition + " end: " + initialPosition + toLookUp.length);

可替换地:

String foo = "foo bar bar";
String toLookUp = "bar";
int initialPosition = foo.indexOf(toLookUp);
while(initialPosition != -1)
{
     System.out.println("Initial Position: " + initialPosition + " end: " + initialPosition + toLookUp.length);
     initialPosition = foo.indexOf(toLookUp, initialPosition + toLookUp.length;
}

答案 2 :(得分:1)

因为你的行计数器从'1'开始而你的数组计数器从'0'开始,你输出错误。

您需要在line -= 1;之后添加int pos = 0;并获得正确的输出。