2012-05-26 90 views
2

我试图创建一个程序来读取文件并检查文本是否是回文。代码编译,但没有真正的工作。java将next()分配给字符串或分解为字符

问题是我不知道如何将完整的标记分解为字符或将其分配给字符串,以便使用字符串的长度将push(排队)的每个字母或数字放入stack(队列)中。任何人都可以为此提出解决方案吗?

public static void main(String [] args) throws IOException{ 
    StackReferenceBased stack = new StackReferenceBased(); 
    QueueReferenceBased queue = new QueueReferenceBased(); 
    Scanner s = null; 
    String fileName=args[0]+".txt"; 
    int symbols = 0; 
    int lettersAndDigits =0; 
    int matches = 0; 

    try{ 
     s = new Scanner(new File(fileName)); 
     while(s.hasNext()){ 
     String current = s.next(); 
     for(int i=0;i<current.length();i++){ 
      char temp = s.next().charAt(i); 
      if(Character.isLetterOrDigit(temp)){ 
      stack.push(temp); 
      queue.enqueue(temp); 
      lettersAndDigits++; 

      } 
      else { 
      symbols++; 

      } 
     } 
     } 
     System.out.println("There are: " + " "+ symbols + " " +"symbols and " + " "+lettersAndDigits + " "+ "digits/letters"); 


    } 
    catch (FileNotFoundException e) { 
     System.out.println("Could not open the file:" + args[0]); 
    } //catch (Exception e) { 
     //System.out.println("ERROR copying file"); 
     finally { 
     if(s != null){ 
     s.close(); 
     } 
    } 
    while (!stack.isEmpty()){ 
     if(!stack.pop().equals(queue.dequeue())){ 
      System.out.println("not pali"); 
      break; 
     } 
     else { 
     ++matches; 
     } 
    } 

    if(matches==lettersAndDigits){ 
     System.out.print("pali"); 
    } 
    } 
+0

这是功课吗?否则,你只是为了检查字符串是否是回文而做太多。 –

+0

是的,它的任务:) – Rennos

回答

1

而不是

char temp = s.next().charAt(i); 

你需要

char temp = current.charAt(i); 

通过调用s.next()你从文件中读取下一个标记,并尝试访问基础上,该令牌的i个元素第一个字符串的长度(current),如果读取的令牌比第一个令牌短,会导致异常

+0

哦,非常感谢!下次应该仔细阅读我的代码:) – Rennos