如何在Java中的令牌中搜索特定单词?

时间:2018-07-30 18:20:39

标签: java string loops

我有一段代码,将一个字符串分割成多个令牌,并将它们分别打印在新行上。我很难编写代码来确定一个单词是否为保留单词。如果单词是java关键字,则必须打印“保留单词为:”,否则请打印“当前单词为:”。到目前为止,这是我的代码:

package projectweek3;

/**
 * 
 * Name - 
 * Email Address - 
 * Date - 
 * 
 */
public class Week3Project {
    final static String program = "/*\n" +
" * To change this license header, choose License Headers in Project Properties.\n" +
" * To change this template file, choose Tools | Templates\n" +
" * and open the template in the editor.\n" +
" */\n" +
"package testapplication2;\n" +
"\n" +
"import java.util.Scanner;\n" +
"\n" +
"/**\n" +
" *\n" +
" * @author james\n" +
" */\n" +
"public class TestApplication2 {\n" +
"\n" +
"    /**\n" +
"     * @param args the command line arguments\n" +
"     */\n" +
"    public static void main(String[] args) {\n" +
"        Scanner input = new Scanner(System.in);\n" +
"        \n" +
"        System.out.println(\"Enter integer #1\");\n" +
"        int num1 = input.nextInt();\n" +
"        \n" +
"        System.out.println(\"Enter integer #2\");\n" +
"        int num2 = input.nextInt();\n" +
"        \n" +
"        System.out.println(\"Enter integer #3\");\n" +
"        int num3 = input.nextInt();\n" +
"        \n" +
"        System.out.println(\"Enter integer #4\");\n" +
"        int num4 = input.nextInt();\n" +
"        \n" +
"        System.out.println(\"Enter integer #5\");\n" +
"        int num5 = input.nextInt();\n" +
"        \n" +
"        //determine the sum\n" +
"        int sum = num1 + num2 + num3 + num4 + num5;\n" +
"        \n" +
"        //this is helpful to make sure your sum is correct\n" +
"        System.out.println(\"The sum is: \" + sum);\n" +
"        \n" +
"        //why doesn't this generate the sum correctly\n" +
"        double average = sum / 5;\n" +
"        \n" +
"        //The average, lets hope its right...\n" +
"        System.out.println(\"The average of your numbers is: \" + average);\n" +
"        \n" +
"    }\n" +
"    \n" +
"}\n" +
"";


    **public static void main(String[] args)
    {
        String str = program;

        String s = "";

        for (int i = 0; i < str.length(); i++) {
            s += str.charAt(i) + "";
            if (str.charAt(i) == ' ' || str.charAt(i) == '\t' || str.charAt(i) == '\n' || (str.charAt(i) == ' ' && str.charAt(i) == '\n')) {
                String currentWord = s.toString();
                String res = "int";
                        if (currentWord.equals(res)) {
                            System.out.println("Reserved word is: [" + currentWord + "]");
            }
                            else {
                                    System.out.println("Current word is: [" + currentWord + "]");
                        }

                s = "";//Clear the string to get it ready to build next token.


            }
        }**

1 个答案:

答案 0 :(得分:0)

我会重新考虑您遍历“程序”的方式。

使用Java String.split()函数代替逐个字符地进行操作。

String program = "int num1 = input.nextInt();\n";

String[] words = program.split("[\\n\\s\\t]");
for (String word : words) {
    System.out.println(word);
}

输出:

int
num1
=
input.nextInt();

编辑:

由于不能使用String.split(),因此循环解决方案看起来不错。要检查当前单词是否已保留,请尝试使用Set.contains()。

Set<String> reserved = new HashSet<>();
reserved.add("int");

// ...

if reserved.contains(word) {
    System.out.println("Reserved word is: " + word);
} else {
    System.out.println("Current word is: " + word);
}

也就是说,假设您被允许使用Set。