我有一个包含多行的文本,我将行号作为输入现在我想拥有该行的起始位置和结束位置,这是我已经做过的但它不起作用:
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);
答案 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;
并获得正确的输出。