A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-5-25 23:36  /  1479 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 高鑫 于 2012-5-25 23:37 编辑
  1. class MySrim
  2. {        String s;
  3.         int start=0;
  4.         
  5.         MySrim(String s)
  6.         {
  7.                 this.s=s;
  8.         }
  9.         int end=s.length();
  10.         public void method()
  11.         {
  12.                 while(start<=end&&s.charAt(start)==0)
  13.                 {
  14.                         start++;
  15.                 }
  16.                 while(start<=end&&s.charAt(end)==0)
  17.                 {
  18.                         end--;        
  19.                 }
  20.                 System.out.println(s.substring(start,end+1));
  21.         }

  22. }
  23. class StringDemo
  24. {
  25.         public static void main(String args[])
  26.         {
  27.              String s="   abc cd   ";
  28.              System.out.println(s);
  29.              MySrim my=new MySrim(s);
  30.              my.method();
  31.             
  32.         }
  33. }
复制代码
老师的练习题,把一个字符串两头的空格去掉,编译可以通过,运行显示空指针异常,搞不懂,谁给看看

6 个回复

倒序浏览
int end = s.length() ;end作为成员变量,类加载后就初始化赋值,此时s 是没有的,所以报空指针异常了..
回复 使用道具 举报
  1. package com.test;

  2. import java.io.*;
  3. import java.util.*;

  4. public class Test {

  5.         String s;
  6.         int start = 0;

  7.         Test(String s) {
  8.                 this.s = s;
  9.                
  10.         }
  11.        
  12.         //int end = s.length();
  13.         int end;  //域要比构造器先初始化,所以s刚开始是空,所以是空指针异常

  14.         public void method() {
  15.                 end = s.length();
  16.                 while (start <= end && s.charAt(start) == ' ') {
  17.                         start++;
  18.                 }
  19.                 while (start <= end && s.charAt(end-1) == ' ') {  //不可能达到end的大小
  20.                         end--;
  21.                 }
  22.                 System.out.println(s.substring(start, end ));  //这里就是start end
  23.         }

  24.         public static void main(String[] args) {
  25.                 String s = "   abc cd   ";
  26.                 System.out.println(s);
  27.                 Test my = new Test(s);
  28.                 my.method();
  29.         }

  30. }
复制代码
回复 使用道具 举报
本帖最后由 小小企鹅 于 2012-10-27 22:32 编辑

int end=s.length();//s还没有赋值,显示空指针异常
while(start<=end&&s.charAt(start)==0) //判断的是空格,改成==' '好些

class MySrim
{        String s;
        int start=0;
        
        MySrim(String s)
        {
                this.s=s;
                this.end = s.length() -1 ;
        }
        int end;
        public void method()
        {
                while(start<=end&&s.charAt(start)==' ')
                {
                        start++;
                }
                while(start<=end&&s.charAt(end)==' ')
                {
                        end--;        
                }
                System.out.println( s.substring(start,end+1));
        }

}

点评

受教  发表于 2012-5-26 00:22
回复 使用道具 举报
class MySrim
{        String s;
        int start=0;
        int end;
        MySrim(String s)
        {
                this.s=s;
                this.end = s.length() -1 ;
        }
        
        public String method()
        {
                while(start<=end&&s.charAt(start)==' ')
                {
                        start++;
                }
                while(start<=end&&s.charAt(end)==' ')//空格
                {
                        end--;        
                }
                return s.substring(start,end+1);//包头不包尾
        }

}
class Test
{
        public static void main(String args[])
        {
             String s="   abc cd   ";
             System.out.println(s);
             MySrim my=new MySrim(s);
             s = my.method();
             System.out.println(s);
            
        }
}
回复 使用道具 举报
栗培文 发表于 2012-5-26 00:12
int end=s.length();//s还没有赋值,显示空指针异常
while(start

兄弟,水平高啊,我没发现的错误都指出来了,谢过
回复 使用道具 举报
互相学习,共同进步吧!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马