【问题标题】:How to omit adding '\n' (newline char) to a char array reading from file如何省略将“\ n”(换行符)添加到从文件读取的字符数组中
【发布时间】:2014-04-19 18:49:59
【问题描述】:

如果之前有人问过这个问题,我深表歉意。搜索了一下,好像没找到解决办法……

我正在将字符添加到 .txt 文件中的 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[] 中,不包括换行符。

然后我基于这个数组的内容进行切换并相应地填充内容。问题是当开关遇到换行符时它不知道该怎么做。我尝试为 '\n' 添加一个案例,它递归地调用相同的函数......不用说,它没有用。 (这个 '\n' 案例是在 readState() 方法中没有 'if' 语句的情况下尝试的)。

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 设置分隔符,以便将其忽略?

【问题讨论】:

  • ds 是什么类型?我打算建议使用readline 方法来读取流文本行,它为您提供没有行终止符的文本行,但是您的readState 的第二个版本让我感到困惑,因为它的功能似乎与您的第一个完全不同版本。所以目前还不清楚你想要实现什么。
  • 我正在做的是填充具有不同状态的板网格。 .txt 文件的目的是制作“地图”。如果我可以开始新行,那是最简单的,这样我就可以看到布局。我想要做的是获取 .txt 文件中所有字符的列表,然后填充然后将板的单元格设置为不同的“状态”。 'ds' 是一个数据输入流。编辑:我将添加整个班级。没有太多额外的。
  • 为澄清起见,我重命名了第二个 readState(),因为它不是同一件事,而是属于不同的类。

标签: java file-io newline arrays


【解决方案1】:

我不知道您的文件的结构。但这里有一段代码可以让 .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();
        }


    }

}

【讨论】:

  • 谢谢!我只是在考虑如何将每一行添加到一个字符串中,然后转换为一个 char 数组。当然这会解决我的问题!干杯,复活节快乐!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多