首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 空指针错误,大家帮忙找错 [已结贴,结贴人:seadog00]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • seadog00
    • 等级:
    发表于:2008-08-21 11:53:37 楼主
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.StringTokenizer;

    public class DeleteDuplicate {

    static void Reader() {
    try {
    BufferedReader br = new BufferedReader(new FileReader("1.txt"));
    String S = br.readLine();
    String[] s = new String[100];
    while (S != null) {
    StringTokenizer t = new StringTokenizer(S);
    for (int i = 0; i < S.length(); i++) {
    s[i] = t.nextToken();//运行时说空指针错误了...我不明白
    }
    for (int i = 0; i < (S.length() - 1); i++) {
    if (!s[i].equalsIgnoreCase(s[1 + i])) {
    Work(s[i]);
    }
    }
    }
    br.close();
    } catch (IOException e) {
    System.out.println("IO Exception " + e);
    }
    }

    static void Work(String s) {
    try {
    FileWriter fw = new FileWriter("2.txt", true);
    fw.write(s);
    fw.write(" ");
    fw.close();
    } catch (IOException e) {
    System.out.println("IO Error " + e);
    }
    }

    public static void main(String[] agrs) {
    Reader();
    }

    }
    其中1.txt内容是:aabbbbbbbaaaaacccc
    120  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-08-21 12:03:221楼 得分:30
    StringTokenizer

    public StringTokenizer(String str)

        Constructs a string tokenizer for the specified string. The tokenizer uses the default delimiter set, which is " \t\n\r\f": the space character, the tab character, the newline character, the carriage-return character, and the form-feed character. Delimiter characters themselves will not be treated as tokens.


    for (int i = 0; i < S.length(); i++) {
    s[i] = t.nextToken();//运行时说空指针错误了...我不明白
    你既然用了token,为啥还要去循环S, 你的StringTokenizer只会以默认的" \t\n\r\f"去分割,而不是把每个字符分割


    另外,while (S != null) 是不是个死循环


    学者去debug吧,空指针异常debug很容易找到的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • seadog00
    • 等级:
    发表于:2008-08-21 13:17:132楼 得分:0
    谢谢回复,可是我刚刚学,很多不明白的.

    因为要将每个字符串读取,所以我将S循环了,还是你的意思是叫我直接用Token?我这里糊涂了
    我将文件改了下,"1.txt":a a a b b b f f f h


    Java code
    static void Reader() { try { BufferedReader br = new BufferedReader(new FileReader("1.txt")); String S = br.readLine(); String[] s = new String[100]; while (S != null) { StringTokenizer t = new StringTokenizer(S," "); for (int i = 0; i < S.length(); i++) { s[i] = t.nextToken(); } for (int i = 0; i < (S.length() - 1); i++) { if (!t.nextToken().equalsIgnoreCase(t.nextToken())) { Work(s[i]); } } [color=#FF0000]S = br.readLine();[/color] } br.close(); } catch (IOException e) { System.out.println("IO Exception " + e); } }

    还是报错了,可以帮我改下么??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-08-21 13:34:373楼 得分:30
    每个字符就不要用StringTokenizer了,你根本不需要用到它的功能
    如果一定要用,你的for循环就不要再依赖S了,直接用t.hasNext来循环

    "A B"长度是3
    但是只有有两个token,想想就知道了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • fosjos
    • 等级:
    发表于:2008-08-21 13:37:314楼 得分:30
    设一下断点或打印一下哪里异常了
    自己调试吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-08-21 13:55:045楼 得分:20
    用 System.out.println试试哪里没有接受到东西吧。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-08-21 13:55:116楼 得分:10
    不要用StringToken,现在已经很少 用了,用正则吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-08-21 13:56:307楼 得分:0
    你要完成什么功能,说清楚,我用另外的方法看能不能实现
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved