在匹配文本中查找单词索引
Find index of words in matched text
我正在使用 Matcher
在句子中查找短语,但我还想在找到的短语中查找每个单词的索引。我的意思是想象一个句子被每个词索引:
This is my wonderful sentence
0 1 2 3 4
它们将按上述方式编入索引。但是,我只需要找到短语本身,而不是句子中其他地方的短语中的单个单词。
I know this sentence repeats but you know that it doesn't
0 1 2 3 4 5 6 7 8 9 10
如果我匹配短语 but you know
然后我想获得匹配的单词的索引,但我不想 return 为单词 know
附近的索引 1一开始,我只想 return 5、6 和 7。我想不出有什么好的方法来匹配这个短语和这个代码:
String line = "I know this sentence repeats but you know that it doesn't";
final Matcher match = Pattern.compile("but you know").matcher(line);
if (match.find())
System.out.println(match.group(0));
明确地说,我想要这个匹配短语的索引号 5、6 和 7,在数组或其他东西中。
这是一种方法。
- 找到短语的索引并获取到该点为止的句子的子字符串。
- 然后使用拆分对子字符串中的单词进行计数。数组的长度将是短语第一个单词的起始索引,除非
indexOfPhrase == 0
。那么它将是0.
- 然后拆分短语得到每个词,递增初始子串的前一个词索引。
String sentence =
"I know this sentence repeats but you know that it doesn't";
String phrase = "but you know";
int indexOfPhrase = sentence.indexOf(phrase);
String[] temp = sentence.substring(0, indexOfPhrase).trim().split("\s+");
int firstIndex = indexOfPhrase == 0 ? 0 : temp.length;
int start = firstIndex;
for (String word : phrase.split("\s+")) {
System.out.printf("%8s : %d%n", word,start++);
}
版画
but : 5
you : 6
know : 7
要将值放入数组中,您可以执行以下操作:
int[] indices = new int[phrase.split("\s+").length];
Arrays.setAll(indices, i-> firstIndex+i);
我正在使用 Matcher
在句子中查找短语,但我还想在找到的短语中查找每个单词的索引。我的意思是想象一个句子被每个词索引:
This is my wonderful sentence
0 1 2 3 4
它们将按上述方式编入索引。但是,我只需要找到短语本身,而不是句子中其他地方的短语中的单个单词。
I know this sentence repeats but you know that it doesn't
0 1 2 3 4 5 6 7 8 9 10
如果我匹配短语 but you know
然后我想获得匹配的单词的索引,但我不想 return 为单词 know
附近的索引 1一开始,我只想 return 5、6 和 7。我想不出有什么好的方法来匹配这个短语和这个代码:
String line = "I know this sentence repeats but you know that it doesn't";
final Matcher match = Pattern.compile("but you know").matcher(line);
if (match.find())
System.out.println(match.group(0));
明确地说,我想要这个匹配短语的索引号 5、6 和 7,在数组或其他东西中。
这是一种方法。
- 找到短语的索引并获取到该点为止的句子的子字符串。
- 然后使用拆分对子字符串中的单词进行计数。数组的长度将是短语第一个单词的起始索引,除非
indexOfPhrase == 0
。那么它将是0. - 然后拆分短语得到每个词,递增初始子串的前一个词索引。
String sentence =
"I know this sentence repeats but you know that it doesn't";
String phrase = "but you know";
int indexOfPhrase = sentence.indexOf(phrase);
String[] temp = sentence.substring(0, indexOfPhrase).trim().split("\s+");
int firstIndex = indexOfPhrase == 0 ? 0 : temp.length;
int start = firstIndex;
for (String word : phrase.split("\s+")) {
System.out.printf("%8s : %d%n", word,start++);
}
版画
but : 5
you : 6
know : 7
要将值放入数组中,您可以执行以下操作:
int[] indices = new int[phrase.split("\s+").length];
Arrays.setAll(indices, i-> firstIndex+i);