1

文字列のテキスト パラメータと、文字列の配列を返す文字列の「regexes」パラメータの配列を受け取ることができるメソッドを Java で記述する必要があります。

返された配列が基本的に何をするかを知りたいのですString.splitが、複数の文字列正規表現を使用し、正規表現を削除する代わりに配列に保持します。

例:
Input: "int a=10; a++;"
Regexes: "int", ";", "++", "="
Output: "int", " a", "=", "10", ";", " a", "++", ";"

そして、私は以下を含むいくつかのことを試しましたが、どれもうまくいきませんでした

public static String[] splitIntoBits(String in, String[] regex)
{
    List<String> bitList = new ArrayList<String>();

    for(int i = 0; i < in.length(); i++)
    {
        int lastIndex=0;
        //Check that character against all regexes
        for(int j = 0; j < regex.length; j++)
        {   
            if(in.substring(i).startsWith(regex[j]))
            {
                bitList.add(in.substring(lastIndex, i));
                lastIndex=i;
            }
        }
    }

    return bitList.toArray(new String[0]);
}
4

1 に答える 1

0

引数内のすべての正規表現に一致する単一の正規表現をMatcher.find()作成し、end().

注: 以下のコードでは、Pattern.quote(r)「++」(無効な正規表現パターン) を処理することを示しています。実際に引数として正規表現をサポートしている場合は、呼び出しを削除してください。

    String[] regex = { "int", ";", "++", "=" };
    StringBuilder pattern = new StringBuilder();
    for (String r : regex) {
        pattern.append('|').append(Pattern.quote(r));
    }

    String input = "int a=10; a++;";
    Matcher m = Pattern.compile(pattern.substring(1)).matcher(input);
    // e.g. m = Pattern.compile("int|;|\\+\\+|=").matcher(input);
    List<String> result = new ArrayList<String>();
    for (int i=0 ; m.find() ; i = m.end()) {
        if (i != m.start()) {
            result.add(input.substring(i, m.start()));
        }
        result.add(m.group(0));
    }
    String[] array = result.toArray(new String[result.size()]);
于 2013-04-24T21:19:13.793 に答える