0

我正在使用 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 );

如果我将 ( cmd3 + "(.* )" ) 替换为 ( "th(.*)" ),则代码可以正常工作。我认为这里的问题是格式,我真的想不通。

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

TLDR;

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

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

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

谢谢!

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

4

4 回答 4

2

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

试试吧

if( words.get(i).startsWith(cmd3))
于 2013-11-13T02:57:05.747 回答
0

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

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

我认为 .startWith(cmd3) 会更好地为您服务。

你可以在这里阅读 .starsWith()

于 2013-11-13T02:56:51.370 回答
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");
}
于 2013-11-13T02:59:36.903 回答
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]

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

于 2013-11-13T04:19:32.483 回答