【问题标题】:Java:Read Tokens [duplicate]Java:读取令牌[重复]
【发布时间】:2013-05-16 13:47:22
【问题描述】:

代码应该读取文件并检查它。如果数据类型或关键字或操作。代码编译没有错误,但没有出现 jTextArea 检查的结果。可能是我忘记了什么,但 jTextArea 什么也没读。

  public boolean IsKeyWords(String x)
{
    List myList = new ArrayList(); 
String[] keywords= new String[] { "for" , "if" , "else" , "return" ,"and" , "goto" , "true" ,"false" , "break" , "continue" , "do" , "this" , "class" , "delete" , "void" , "public" , "private" , "operator" , "static" , "struct" , "volatile" , "while" ,};
Collections.addAll(myList, keywords);
    for(int i = 0;i<myList.size();++i)
    {if(x.equals(myList.get(i)))
        return true;

    }
    return false;
}       
 public boolean IsOperaions(String x)
{
  List myList1 = new ArrayList(); 
String[] Operations = new String[]{"+", "-" , "*" , "%" , "/" , "=" , ">>=" , "<<=" , "&=" , "+=" , "-=" , "/=" , "*=" , "^=" , "++" , "--" , "==" , "!=" , ">" , "<" , ">=" , "<=" , "!" , "&&" , "||" , "|=" , ">>" , "<<" , "&" , "~" , "^" , "|"};
Collections.addAll(myList1, Operations);
    for(int i = 0;i<myList1.size();++i)
    {if(x.equals(myList1.get(i)))
        return true;

    }
    return false;

}

public boolean IsDatatype(String x)
{
  List myList2 = new ArrayList(); 
  String[] Datatype = new String[]{"int" , "char" ,"float" , "double" , "String"};
  Collections.addAll(myList2, Datatype);
    for(int i = 0;i<myList2.size();++i)
    {if(x.equals(myList2.get(i)))
        return true;

    }
    return false;

}

当我按下时,这里的按钮应该读取文件并检查它。

private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {                                           


   JFileChooser chooser = new JFileChooser();
   chooser.showOpenDialog(null);
   File f =chooser.getSelectedFile();
   String filename2=f.getAbsolutePath();
   BufferedReader br;
   try {
        br = new BufferedReader(new FileReader(filename2));
    String line;
    ArrayList <String> tokens=new ArrayList<>();
    StringTokenizer words;
    while ((line = br.readLine()) != null) {
    words = new StringTokenizer(line);

    while(words.hasMoreTokens())
       {
       for(int i=0;i<line.length();++i)
       {
       tokens.add(line.getBytes().toString());

       }
    words.nextToken();

       }
      for(int i=0;i<tokens.size();i++)
    {
      jTextArea1.setText(tokens.get(i).toString());

   if(IsKeyWords(tokens.get(i)))
  {
   jTextArea1.setText(tokens.get(i).toString());
   }
   else if(IsOperaions(tokens.get(i)))
  {
   jTextArea1.setText(tokens.get(i).toString());


   }}
    br.close();

    }
    }
       catch (FileNotFoundException ex) {
    } catch (IOException ex) {
    }     

    }                                          

【问题讨论】:

  • if(x==myList.get(i)) 这不是我们在 Java 中比较字符串的方式。这个问题今天被问了两次:_(
  • 但是当我使用它时我得到错误
  • 我仍然有同样的问题不要阅读任何东西:(
  • 我编辑了它,但我有同样的问题..可能是阅读的功能

标签: java token


【解决方案1】:

除了 String#equals String 比较问题已被明确标记外,主要问题是 BufferedReader br 在读取循环中被关闭,当尝试调用 @987654326 时会抛出 IOException @。将 close 语句移动到 finally

} finally {
    try {
        br.close();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}

此外,向标记List 添加字节数组将导致JTextArea 中的工作不可读。替换

tokens.add(line.getBytes().toString());

tokens.add(line);

Java 中的集合使用泛型 来避免强制转换。将它们应用于List 的所有实例,例如

List<String> myList = new ArrayList<>();

【讨论】:

  • 它现在在 TextArea 中给了我一些东西,但在文件“[B@752719ad”中却不一样
  • 为什么要在令牌List 中添加字节数组?只需添加line String
  • yesssssssss 成功了!!! :)
  • 我希望可以投票给你,但仍然是小问题
  • KK 谢谢我做了:)
猜你喜欢
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2014-10-05
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多