-5

请我非常需要帮助。谢谢你

我从硬盘中读取了一个文本文件,其中包含以下内容....

void main()
{

    int A = 5;
    int B = 5;
    int C ; 
    C = A + B;
    cout << C ; 

}

所以,我需要做的是......假设我有一系列......

String []KeyWord = {"void", "main()"};
String []DataType = {"int", "float"};

所以我想遍历每个标记并检查它是关键字还是数据类型。我使用了java netBeans,我的代码如下

int k = 0; int l = 0;

StringTokenizer Tokens;

while ((CurrentLine = ReadFile.readLine()) != null)
{
    Tokens = new StringTokenizer(CurrentLine, " ", true);
    for (int i = 0; Tokens.hasMoreTokens(); i++)
    {
        if (Tokens.nextToken().contains(KeyWord[k]))
        {
            jTextArea1.append(KeyWord[k] + "\n");
            k++;
        } 
        else if (Tokens.nextToken().contains(DataType[l]))
        {
            jTextArea2.append(DataType[l] + "\n");
        }
    } 
} 
4

3 回答 3

6

不,您的代码将不起作用。当您迭代令牌时,您永远不会增加保留的 k 和 l 0;暗示您总是只检查第一个关键字和数据类型。

建议

  • 当您有多个分隔符和比基本拆分更高级的需求时,请使用更简单String.split()的而不是通常使用的。StringTokenizer并且由于您returnDelims作为true(第三个参数)传递,因此您也收到了您的空间作为您的令牌(这不是您想要的我想)。

  • 使用 aHashSet<String>来存储您的关键字/数据类型,而不是 Array 或 ArrayList。与迭代 Array 或使用ArrayList.contains().

  • 示例实现

    HashSet<String> keyWords = new HashSet<String>(
            Arrays.asList(new String[] {"void", "main()"}));
    HashSet<String> dataTypes = new HashSet<String>(
            Arrays.asList(new String[] {"int", "float"}));
    
    String newLine = System.getProperty("line.separator");
    while ((currentLine = readFile.readLine()) != null) {
        String[] tokens= currentLine.split(" ");
        for (String token : tokens) {
            if (keyWords.contains(token)) {
                jTextArea1.append(token + newLine);
            } else if (dataTypes.contains(token)) {
                jTextArea2.append(token + newLine);
            }
        }
     }
    
于 2013-05-15T13:19:21.747 回答
0

首先,将keyWorddataType数组转换为ArrayList.

然后,执行以下操作:

while ((currentLine = ReadFile.readLine()) != null) {
   String[] tokens= currentLine.split(" ");
   for (String token : tokens) {
      if (keyWord.contains(token)) {
         jTextArea.append(token);
      }
   } 
    //rest of the code is similar
}
于 2013-05-15T13:12:38.757 回答
0
public static void main(String gkadc[]) {
 
    String s = "the                   sky                     is         ";
    StringBuilder sb = new StringBuilder();
     
    StringTokenizer t = new StringTokenizer(s);
      
    for(int i=0;i<( 2*t.countTokens() +1  );i++) {//imp line
        sb.append(t.nextElement()+" ");
    }     
    System.out.println( sb); 
 
} 

//out _   "the sky is"   
于 2020-10-31T14:42:10.423 回答