String匹配方法以获取Java中以指定字母开头的单词

时间:2013-11-13 02:51:17

标签: java string arraylist iteration

我使用ArrayList来保存字符串列表,我正在迭代ArrayList并尝试返回以字符串开头的单词(用户输入)。

我的代码:

private void doP( ArrayList <String> words, String cmd3 )
{
    for( int i = 0; i < words.size(); i++ )
    {
        if( words.get( i ).matches( cmd3 + "(.*)" ))
        {
            tempString.add( words.get( i ));
            System.out.println( "H:" + words.get( i ));
        }
    }

    System.out.println( tempString );

如果我用(“th(。*)”)替换(cmd3 +“(。*)”)代码,代码可以正常工作。 我认为这里的问题是格式,我真的无法解决这个问题。

很抱歉使用非描述性术语,我刚刚开始编程2个月前...

TLDR;

if( words.get( i ).matches( cmd3 + "(.*)" ))

这是问题,特别是(cmd3 +(。*))。我的逻辑是,用户在末尾输入(。*)的任何字符串都应该有效,所以例如,如果用户键入“ABCD”,那么我应该:

if( words.get( i ).matches( "ABCD(.*)" ))

谢谢!

PS:startsWith()方法完成了这项工作,这对我来说是一个非常小的错误。感谢所有回答的人。

4 个答案:

答案 0 :(得分:2)

根据您的描述,您似乎正在尝试重新发明startsWith方法。

尝试一下

if( words.get(i).startsWith(cmd3))

答案 1 :(得分:0)

这是因为.matches正在使用正则表达式,因此它正在查找cmd3的值。

我不想过于详细地使用正则表达式并让你感到困惑,但是(。*)的部分可以正常工作,因为它基本上是在添加“零个或多个任何字符”

我认为.startWith(cmd3)会更适合您。

你可以阅读.starsWith()here

答案 2 :(得分:0)

您可以使用startsWith(str)方法:

private static void doP(ArrayList<String> words, String cmd3)
{
    ArrayList<String> tempString = new ArrayList<String>();
    for (int i = 0; i < words.size(); i++)
    {
        if (words.get(i).startsWith(cmd3))
        {
            tempString .add(words.get(i));
            System.out.println("H:" + words.get(i));
        }
    }

    System.out.println(tempString.toString());
}

public static void main(String[] args) throws FileNotFoundException
{
    ArrayList<String> strings = new ArrayList<String>();
    strings.add("ABCDE");
    strings.add("ABCDEFG");
    strings.add("BCDE");
    doP(strings, "ABC");
}

答案 3 :(得分:0)

我试图运行你在这里发布的方法,它似乎没有任何问题,我只需要在你的方法中放入tempString的声明

import java.util.ArrayList;
public class Test {     
public static void main(String a[] ) {   
  ArrayList<String> arr = new ArrayList<String>(); 
  arr.add("ABCD");
  arr.add("EFGH");
  arr.add("ABYZ");
  doP(arr, "AB");
}

private static void doP( ArrayList <String> words, String cmd3 )
{
    ArrayList<String> tempString = new ArrayList<String>(); 
    for( int i = 0; i < words.size(); i++ )
    {
        if( words.get( i ).matches( cmd3 + "(.*)" ))
        {
            tempString.add( words.get( i ));
            System.out.println( "H:" + words.get( i ));
        }
    }

    System.out.println( tempString );
}
}

在运行它时,它产生了以下输出

H:ABCD
H:ABYZ
[ABCD, ABYZ]

这不是您对输出的期望吗?那么这里真正的问题是什么?