我知道这一定是显而易见的,但找不到答案。
我应该怎样做才能获得正确的特征,例如“,”等......?
这是我正在使用的方法,
public void read(Context context) {
InputStream inputStream = context.getResources().openRawResource(
R.raw.puzzles);
Scanner scanner = new Scanner(inputStream);
scanner.useDelimiter(PATTERN);
for (int i = 0; i < 70; i++) {
ids[i] = scanner.next();
titles[i] = scanner.next();
questions[i] = scanner.next();
answers[i] = scanner.next();
}
}
由于
答案 0 :(得分:1)
经过几天的研究,我终于找到了答案。
首先,我从InputStream创建了一个BufferedReader,用于读取字符而不是原始字节读取。
最重要的是,我使用带有charSetName的构造函数实例化了InputStream。
如果您在NotePad中选择“另存为”,则可以选择编码。
最后,我找到了here支持的编码。
NotePad中的默认值似乎是ANSI,似乎不受支持,所以我更改了它并将我的.txt文件保存为UTF8。
以下是代码:
public void read(Context context) {
InputStream inputStream = context.getResources().openRawResource(
R.raw.puzzles);
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new InputStreamReader(
inputStream, "UTF8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
Puzzle p = null;
Scanner scanner = new Scanner(bufferedReader);
scanner.useDelimiter(TOKEN);
// Skips the first strange char
scanner.next();
while (scanner.hasNext()) {
p = new Puzzle();
p.setId(scanner.next());
p.setTitle(scanner.next());
p.setQuestion(scanner.next());
p.setAnswer(scanner.next());
puzzles.add(p);
}
}
答案 1 :(得分:0)
默认情况下,扫描仪对象似乎只能识别字母和数字...尝试使用不使用扫描仪的方法,就像这个问题的答案一样:Android read text raw resource file
使用String.indexOf()或TextUtils.StringSplitter或类似的东西来读取每一行并解析令牌之间的真实字符串。
您可能希望使用while循环读取数据,直到文件末尾而不是固定数字(在您的情况下为70),以用于可能包含更多或更少数据的未来拼图文件。
答案 2 :(得分:0)
尝试使用传递字符集的Scanner
实例,即
new Scanner (InputStream src, String charsetName)
HTH