【发布时间】:2012-02-17 16:04:09
【问题描述】:
这很奇怪...
BufferedReader br = new BufferedReader(new InputStreamReader(openFileInput("file")));
String s;
while ((s = br.readLine()) != null) {
String[] sa = s.split("a");
String a = sa[0];
String b = sa[1];
String c = a + "the letter a was here" + b;
// Do something with String c...
}
我在“String b = sa[1];”这一行处得到了一个力。 java.lang.NullPointerException。 我在循环中的 'String s' 有多个 'a' 字符,这不是问题。 'String a' 总是正确的。 但是 'String b' 总是抛出异常。 我在循环之外声明了变量(sa,a,b,c),没有帮助。
奇怪的是,StringTokenizer 有同样的问题。 它只能读取第一个令牌/拆分...
StringTokenizer st = new StringTokenizer(s, "a");
int x = st.countTokens();
String a = st.nextToken();
String b = st.nextToken();
String c = a + "the letter a was here" + b;
// Do something with String c...
...在同一个 While 循环中。 同样的问题! 'String a' 是准确的,当系统到达 'String b' 行时,它会抛出相同的异常/错误/强制关闭。 我什至检查了 'int x' 的值,只是为了确保有多个令牌,而且确实有,这又不是问题。
为什么在这个 While 循环中我只能访问/读取/分配/使用我已拆分/标记化的字符串的第一个拆分/标记???
【问题讨论】:
-
你能不能尝试一个不同的令牌,而不是像@这样的东西,让我知道它是否有效
-
在分词器中,您是否在分配给 b 之前尝试使用 st.hasMoreToken()?这可能会有所帮助。
-
使用示例输入进行更新,当我尝试您的逻辑时,它工作正常。
-
C.d.:好主意,但我尝试了很多字符,结果相同。 Urban:总是好的做法,但我知道文件中的行,所以我知道有多少令牌,所以不需要检查,顺便说一句,它仍然返回 true。 thinksteep:我并不惊讶它对你很好,它为什么不起作用是没有意义的。我的文件中有几行是:“那个人有棒球”、“红色汽车又快又安全”等等……我知道有多个令牌,并且“st.countTokens();”返回 4 或 5 或许多(总是超过 2)。我不知道为什么我不能“访问”第二个令牌或数组:(
-
好的,这是我非常奇怪的答案。我删除了本节中的所有代码,然后复制并粘贴了我在 SO 上发布的内容,现在它可以工作了。不知道为什么,目前不在乎:)
标签: android string loops split token