【问题标题】:Android String.split() and/or StringTokenizer() not working in While loopAndroid String.split() 和/或 StringTokenizer() 在 While 循环中不起作用
【发布时间】: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


【解决方案1】:

无论出于什么原因,当“BufferedReader”出现问题时,我只是从测试手机上卸载了该应用程序,然后从头开始运行,问题就解决了。可能“文件”已损坏,我不确定。我遇到过两次这个问题,卸载应用程序并重新运行两次都修复了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-13
    • 2019-12-21
    • 2022-12-12
    • 2020-03-30
    • 2014-10-15
    • 2011-10-19
    • 1970-01-01
    • 2015-08-02
    相关资源
    最近更新 更多