从字符串中提取字符和单词

我希望逐个字符地扫描输入行,并根据有效标记“true”, “false”, “^” “&”, “!”, “(”, “)”生成字符串

例如,如果我给了一个字符串,如String line = true & ! (false ^ true) String line = true & ! (false ^ true)

我必须产生令牌"true", "&", "!", "(", "false", "^", "true", ")"

我一直试图使用split()将字符串划分为标记,并将它们存储在像这样的String[] result = line.split(" ")数组中,然后在循环内部使用一堆if语句查看该索引处的令牌是否与任何有效令牌相匹配并仅返回该令牌。 这是迄今为止我一直在尝试使用的一种方式

for(int i = 0; i < line.length();i++){
    if(result[i].equals("true") || result[i].equals("false") || result[i].equals("^") 
        || result[i].equals("&") || result[i].equals("!") || result[i].equals("(")
        || result[i].equals(")")){
        nextToken = result[i];
}

但显然这不会提取彼此相邻的有效令牌,比如当字符串包含像这样的东西(truetrue^false ,这应该返回三个令牌为"true", "^", "false" 。有没有办法将不包含空格或任何特殊字符的字符串分割成我感兴趣的标记?


只要输入准确,以下内容将标记您的输入:

public class Tokenizer {

    public static void main(String[] args) {

        // true, false, ^ &, !, (, )
        String SYMBOLS = "^&!()";

        String line = "true&!(false^true)";
        List<String> tokens = new ArrayList<String>();

        char[] in = line.toCharArray();
        for (int i = 0; i<in.length; i++) {
            if (in[i] == ' ')
                continue;
            if (SYMBOLS.indexOf(in[i]) >= 0) {
                tokens.add(String.valueOf(in[i]));
            } else if (in[i] == 't') {
                tokens.add("true");
                i += "true".length()-1;
            } else if (in[i] == 'f') {
                tokens.add("false");
                i += "false".length()-1;
            }
        }

        for (String token : tokens)
            System.out.println(token);

    }
}

生产量:

true
&
!
(
false
^
true
)

尝试使用分隔符。 他们会根据您设置的令牌来分隔字符串。 我会看看这个问题的更多信息:如何在Java扫描器中使用分隔符?


编辑: -

如果你需要确切的顺序,你可以这样做: -

public static void main(String[] args)
{
    final String TOKENS = "true,false,!,),(";
    String [] splittedTokens = TOKENS.split(",");
    String Data = "'true','^','false'";

    ArrayList <String> existingTokens = new ArrayList<String>();
    for(int i = 0; i < splittedTokens.length; i++)
    {
        if(Data.contains(splittedTokens[i]))
        {
            existingTokens.add(splittedTokens[i]);
        }
    }

    for(int i = 0; i < splittedTokens.length; i++)
    {
        int count = 0;
        for(int j = 0; j < existingTokens.size(); j++)
        {
            if(splittedTokens[i].equals(existingTokens.get(j)))
            {
                count++;
            }
        }
        System.out.println("Number of "+splittedTokens[i]+" = "+count);
    }
}

如果您只需要该字符串包含的所有标记: -

public static void main(String[] args)
{
    final String TOKENS = "true,false,!,),(";
    String [] splittedTokens = TOKENS.split(",");
    String Data = "true^false";

    for(int i = 0; i < splittedTokens.length; i++)
    {
        if(Data.contains(splittedTokens[i]))
        {
            System.out.println("The String Contains "+ splittedTokens[i]);
        }
    }
}
链接地址: http://www.djcxy.com/p/78353.html

上一篇: Extracting characters and words from a string

下一篇: Java String Split with multiple delimiter using pipe '