【发布时间】: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