如何省略添加' \ n' (换行符char)到从文件读取的char数组

时间:2014-04-19 18:50:00

标签: java file-io newline arrays

如果之前已经提出这个问题,我道歉。我搜索了它,似乎无法找到解决方案......

我正在从.txt文件中将char添加到char []。

我想将所有字符添加到数组,除了换行字符(' \ n'?)。

这就是我正在尝试的,这是行不通的。

import java.io.DataInputStream;
import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;

public class StateReader extends FilterInputStream
{
    private static final int FIELD_SIZE = 25 * 25;
    static int readCount = 0;
    private DataInputStream ds; 

    public StateReader(InputStream in)
    {
       super(in);
       ds = new DataInputStream(in);
    }

    public char[] readState() throws IOException
    {
          char current;
          char[] stateChar = new char[FIELD_SIZE];
          int index = 0;

          while (index < stateChar.length) 
          {
             current = (char) ds.read();

             if(current == '\n')
             {
                current = (char) ds.read();    // Attempting to read char after
                stateChar[index++] = current;  // '\n' encountered, and store that.
             } else {
                stateChar[index++] = current;  // Stores whatever is read.
             }
          }

          for (int i = 0; i < stateChar.length; i++)
          {
             System.out.printf("" + stateChar[i]);  // Prints out contents of Array
                                                    // For troubleshooting...
          }

          return stateChar;
       }
    }
}

我确信有更好的方法可以做到这一点。

如前所述,我试图将文本文件的内容复制到char [],不包括换行符。

然后我根据这个数组的内容进行切换并相应地填充内容。问题是当交换机遇到新行字符时,它不知道该怎么做。我尝试为&#39; \ n&#39;添加一个案例。递归地调用相同的函数...不用说,它没有工作。 (在没有readState()方法中的&#39; if&#39;语句的情况下尝试了这个&#39; \ n&#39;。

public State findState(int p, Cell c)
{
   State myState = null;
   switch (charStateList[p])
   {
      case 'x':   System.out.println("Read 'x':"+readCount);
                  readCount++;
                  myState = new Wall(c);
                  break;
      case 'o':   System.out.println("Read 'o':"+readCount);
                  readCount++;
                  myState = new Empty(c);
                  break;
      case '\n':  findState(p, c);
                  break;
      default:    System.out.println("Default:" + readCount);
                  readCount++;
                  myState = new Empty(c);
                  break;
   }

   return myState;
}

我尝试了.equals(),但却没有为char工作。

感谢您的帮助,我们非常感谢。如果已经回答,我再次道歉。

编辑:有没有办法可以简单地为FileInputStream / DataInputStream设置分隔符,以便忽略它?

2 个答案:

答案 0 :(得分:2)

我不知道您的文件是如何构建的。但是这里有一个代码,可以更容易地从.txt文件向char []添加字符:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class TxtToChar {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String string = "";
        char[] c;
        try {
            Scanner scanner = new Scanner(new File("test.txt"));
            while (scanner.hasNext()){
                string += scanner.useDelimiter("\n").nextLine();

            }
             c = string.toCharArray();
             for(int i =0;i<c.length;i++){
                             if(c[i] !=' '){
                               System.out.println(c[i]);
                             }
             }
        }catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }

}

答案 1 :(得分:0)

使用scanner。默认分隔符是空格。