首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:在两个字符串之间匹配令牌并返回匹配的令牌数

Java:在两个字符串之间匹配令牌并返回匹配的令牌数
EN

Stack Overflow用户
提问于 2012-09-04 09:36:37
回答 2查看 2.5K关注 0票数 0

需要一些帮助才能找到两个字符串之间匹配的标记数。我在ArrayList中存储了一个字符串列表(示例如下):

代码语言:javascript
复制
Line 0 : WRB VBD NN VB IN CC RB VBP NNP  
Line 1 : WDT NNS VBD DT NN NNP NNP  
Line 2 : WRB MD PRP VB DT NN IN NNS POS JJ NNS  
Line 3 : WDT NN VBZ DT NN IN DT JJ NN IN DT NNP  
Line 4 : WP VBZ DT JJ NN IN  NN  

在这里,您可以看到每个字符串都由一串由空格分隔的标记组成。所以,有三件事我需要处理..。

  1. 比较第0行中的第一个令牌(WRB)和第1行中的令牌,看看它们是否匹配。继续到第0行中的下一个令牌,直到找到匹配为止。如果有匹配,在第1行中标记匹配的标记,这样就不会再次匹配。
  2. 返回第0行和第1行之间匹配的标记数。
  3. 返回匹配令牌的距离。示例:令牌NN位于0行的第3位置,第1行的位置5。距离=x-3-5 x=2。

我尝试过使用拆分字符串并将其存储到String[],但是String[]是固定的,不允许收缩或添加新元素。尝试了模式匹配,但结果很糟糕。尝试了一些其他方法,但是嵌套的for循环有一些问题。(如果有帮助的话,我会发布我的部分代码)。

任何关于如何解决这个问题的建议或建议都是非常感谢的。非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-04 10:20:31

你试过使用扫描仪吗?

如果不是的话,完全可以。看起来是这样的:

代码语言:javascript
复制
String line1 = ... // your line 1
String line2 = ... // your line 2
Scanner s1 = new Scanner(line1); 

int i1 = 0;
while (s1.hasNext()) {
    String token1 = s1.next();
    Scanner s2 = new Scanner(line2);

    int i2 = 0;
    while (s2.hasNext()) {
        String token2 = s2.next();

        // now you have token1, token2 and their positions (i1, i2)
        // do whatever you want with them

        i2++;
    } // end reading line2
    i1++;
} // end reading line1

编辑:关于在Arraylist中选择不同行的循环,您需要的是将每个数组元素与每个其他数组元素进行比较(如果没有这种解释,这可能是google最好的方法)。

在Java中,如下所示:

代码语言:javascript
复制
for (int i = 0; i < thearraylist.size()-1; i++) {
    for (int j = i+1; j < thearraylist.size(); j++) {

        // now the elements and indices i and j are compared
        // if we were running into my code above:

        String line1 = thearraylist.get(i);
        String line2 = thearraylist.get(j);

        // ... and then compare them

     }
}

第二个循环从i+1开始的原因是为了消除这些不必要的比较:

  1. 在j=i的每一点上,都会将每个元素与自身进行比较,这是毫无用处的。在上面的循环中,j从i+1开始并增加,所以它永远不会等于i。
  2. 每对元素将进行两次比较。例如,当i=0,j=1时,您正在比较前两个元素。当i=1,j=0时,您也在比较前两个元素。这使得第二个比较变得多余。为了消除第二个“向后”的比较,我们坚持j总是比我高。

如果您对此感到困惑,我强烈建议在遍历循环时列出i和j的值,从而在纸上解决它。

票数 0
EN

Stack Overflow用户

发布于 2012-09-04 09:38:41

以不同的方式思考这个任务。您希望扫描令牌(例如:扫描器),并且希望匹配令牌(因此:一个列表,因为您需要订单)。然后迭代每个令牌的不同集合,记录匹配和距离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12260653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档