[英]Java: How to get Scanner to match the first occurence only and skip if it has been matched before
我有一个由标记组成的字符串列表,这些标记由存储在ArrayList中的空格分隔。 我需要扫描字符串1中的令牌是否存在于字符串2中。我设法使用扫描仪扫描令牌。 但是,扫描仪无法执行我想要的操作。
我需要有关的建议
1. [编辑]示例:字符串1中有一个NN令牌,但是字符串2中有两个NN令牌。因此,扫描程序应在字符串2中扫描NN令牌。 使用我提供的代码,扫描程序将搜索所有NN令牌,包括第二个NN令牌。 它应该在第一个NN令牌处停止,并且不继续扫描所有NN令牌。 {Haley关于中断的建议不会停止扫描仪}
2. [编辑]现在,另一个问题是-如果字符串1具有两个NN令牌,则扫描程序应该足够聪明,以跳过先前扫描中找到的所有令牌。 扫描程序应能够将字符串1中的第二个NN令牌与字符串2中的第二个NN令牌匹配。
这是我到目前为止所拥有的..
import java.util.ArrayList;
import java.util.Scanner;
public class TokenMatching {
public static void main(String[] args)
{
ArrayList<String> taggedArray = new ArrayList<String>();
//Example how the string would look like
String string1 = "WRB VBD NN VB IN CC RB VBP NNP";
String string2 = "WRB NN MD PRP VB DT NN IN NNS POS JJ NNS";
taggedArray.add(string1);
taggedArray.add(string2);
//Nested for loop to match taggedArray(i) with taggedArray(j)
for(int i = 0; i< taggedArray.size(); i++)
{
for(int j = i + 1; j < taggedArray.size(); j++)
{
Scanner scan1 = new Scanner(taggedArray.get(i));
int index1 = 0;
while(scan1.hasNext())
{
String token1;
token1 = scan1.next();
System.out.println(token1);
Scanner scan2 = new Scanner(taggedArray.get(j));
int index2 =0;
while(scan2.hasNext())
{
String token2 = scan2.next();
if(token1.equals(token2))
{
int relPosition;
relPosition = Math.abs(index1-index2);
//The print lines help me keep track of what is going on in the loop
System.out.println("Match found.");
System.out.println("Relative position for " + token1 + " : " + relPosition);
}
else
{
System.out.println("No Match Found.");
}
index2++;
}
index1++;
}
}
}
}
}
任何建议将是一个很大的帮助。 谢谢。
- 有没有办法让Scanner仅扫描第一次出现并移至字符串1中的下一个标记
在您的if(token1.equals(token2))
添加一个break;
在System.out.println("Relative position for " + token1 + " : " + relPosition);
之后System.out.println("Relative position for " + token1 + " : " + relPosition);
。 您想要的是http://ideone.com/2o5Yz生成的输出吗?
为什么不使用
String[] tokens1 = string1.split("\\ ");
String[] tokens2 = string2.split("\\ ");
现在,您可以直接在数组上进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.