以下是具体代码,现在的问题是我只要不用substring()函数就能输出到xml文档,用了之后输出就为空,怎么回事啊,都快疯了!!    
public  static  void  subChange()  {  
                 
                 
               String  s  =  "",line  =  "",interval  =  "A)";  
                 
               String  lineStart  =  "<题干>";  
               String  lineEnd  =  "</题干>";  
               int  pos  =  0;  
               try  {    
                       FileReader  fr=  new  FileReader("C:\\Documents  and  Settings\\ggyy\\Mylib\\build\\classes\\temp.txt");  
                       BufferedReader  br  =  new  BufferedReader(fr);  
                       FileWriter  fw  =  new  FileWriter("C:\\Documents  and  Settings\\ggyy\\Mylib\\build\\classes\\temp.xml");  
                       PrintWriter  out=new  PrintWriter(fw);  
                       s  =  "<?xml  version=\"1.0\"  encoding=\"gb2312\"?>";  
                       out.println(s);  
                       s  =  "<试题信息>";  
                       out.println(s);  
                     while((line  =  br.readLine())  !=  null)  {  
                               pos  =  line.indexOf(interval);  
                               s  =  line.substring(0+3,pos);  
                               out.println(lineStart);  
                               out.println(s);  
                               System.out.println(s);  
                               out.println(lineEnd);  
           
                       }  
                         
                       s  =  "</试题信息>";  
                       out.println(s);  
                       fw.close();  
                       br.close();  
                       out.close();  
                       fw.close();  
                         
               }    
                         catch  (FileNotFoundException  e1)  {  
                       System.err.println("File  not  found"  );  
               }  catch(IOException  e2)  {  
                       e2.printStackTrace();  
               }  
       }

解决方案 »

  1.   

    String substring(int beginIndex, int endIndex) 
              Returns a new string that is a substring of this string. int  pos  =  0;  
    s  =  line.substring(0+3,pos);  
    这里错啦pos = 0;
    当然输不出来了
      

  2.   

    pos  =  line.indexOf(interval);
    我这里不是加了一个定位语句吗?
      

  3.   

    pos  =  line.indexOf(interval);  
    s  =  line.substring(0+3,pos);  
    应该是这里出错了,字符没有找到interval,或者pos<0+3
    慢慢测吧
      

  4.   

    I am so sorry !!
    没仔细看哈
      

  5.   

    好像不是interval的问题,刚才007remember兄弟说了后我又随便换了
    s=s  =  line.substring(0+3,16); 试了下,还是不能输出到xml文档中!
    郁闷阿
      

  6.   

    你把pos输出来看看等于多少不就知道了
      

  7.   

    String  s  =  "",line  =  "",interval  =  "A)";  
    这样定义好像有问题呀
      

  8.   

    pos应该没有问题的
    007remember兄,能具体一点吗?
      

  9.   

    还有补充一点,我用System.out.println(s);  可以输出我想要的字符窜,问题就是xml是空的,最奇怪的就是我把substring()部分屏蔽掉xml中就有数据输入
      

  10.   

    line和interval能输出吗?
    输出看看
      

  11.   

    String  s  =  "",line  =  "",interval  =  "A)";  
    分开定义试试看
      

  12.   

    放在一起和分开是一样的。主要是pos的值, 
    s  =  line.substring(0+3,pos);  
    System.out.println(s); //这时正常吗?
      

  13.   

    kingfish兄,多谢
    呵呵,
    主要是pos的值, 
    s  =  line.substring(0+3,pos);  
    System.out.println(s);
    到这时为止是正常的,就不知道怎么出问题了
      

  14.   

    以下是我的temp。txt,兄弟们可以在自己本机上试一下,多谢拉
    <P>1、 1MB等于() A)1000字节 B)1024字节 C)1000?w1000字节 D)1024?w1024字节</P>
    <P>2、 与十六进制数200等值得十进制数为() A)256 B)512 C)1024 D)2048</P>
    <P>3、 所谓“裸机“是指() A)单片机B)单板机 C)不装备任何软件的计算机 D)只装备操作系统的计算机</P>
    <P>4、 能将高级语言编写的源程序转换为目标程序的是() A)链接程序 B)解释程序 C)编译程序 D)编辑程序</P>
    <P>5、 在64为计算机中,一个字长所占字节数为() A)64 B)8 C)4 D)1</P>
    <P>6、 在Windows环境下,当一个应用程序窗口被最小化后,该应用程序() A)继续在后台运行 B)继续在前台运行 C)终止运行 D)暂停运行</P>
    <P>7、在Windows环境下,能实现窗口移动的操作是() A)用鼠标拖动窗口中的任何部位 B)用鼠标拖动窗口的边框 C)用鼠标拖动窗口的控制按钮 D)用鼠标拖动窗口的标题栏</P>
    <P>8、 在Windows环境下,PrintScreen键的作用是() A)打印当前窗口的内容 B)打印屏幕内容 C)复制屏幕到剪贴板 D)复制当前窗口到剪贴板</P>
    <P>9、 Internet的通信协议是() A)TCP/IP B)BBS C)WWW D)FTP</P>
    <P>10、 下列叙述中正确的是() A)计算机病毒只感染可执行文件 B)计算机病毒只感染文本文件 C)计算机病毒只能通过软件复制的方式进行传播 D)计算机病毒可以通过网络或读写磁盘方式进行传播</P>
    <P>11、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是 A)有零个或多个输入 B)有零个或多个输出 C)有穷性 D)可行性</P>
    <P>12、 以下叙述中正确的是() A)C语言的源程序不必通过编译就可以直接运行 B)C语言中的每条可执行语句最终都将被转换成二进制的机器指令 C)C源程序经编译形成的二进制代码可以直接运行 D)C语言中的函数不可以单独进行编译</P>
    <P>13、 以下符合C语言语法的实型常量是() A)1.2E0.5 B)3.14.159E C).5E-3 D)E15</P>
    <P>14、 以下4组用户定义标识符中,全部合法的一组是() A)_main B)If C)txt D)int enclude -max REAL k_2 sin turbo 3COM _001</P>
    <P>15、 若以下选项中的变量已正确定义,则正确的赋值语句是() A)x1=26.8%3 B)1+2=x2 C)x3=0x12 D)x4=1+2=3;</P>
    <P>16、 设有以下定义 int a=0; double b=1.25; char c=’A’; #define d 2 则下面语句中错误的是() A)a++; B)b++ C)c++; D)d++;</P>
    <P>17、 设有定义:float a=2,b=4,h=3;,以下C语言表达式与代数式 计算结果不相符的是() A)(a+b)*h/2 B)(1/2)*(a+b)*h C)(a+b)*h*1/2 D)h/2*(a+b)</P>
    <P>18、 有以下程序 main( ) { int x=102,y=012; printf(“%2d,%2d\n”,x,y); } 执行后输出结果是() A)10,01 B002,12 C)102,10 D)02,10</P>
    <P>19、以下4个选项中,不能看作一条语句的是() A){;} B)a=0,b=0,c=0; C)if(a&gt;0); D)if(b==0) m=1;n=2;</P>
    <P>20、设有定义:int a,*pa=&amp;a;以下scanf语句中能正确为变量a读入数据的是() A)scanf(“%d”,pa); B)scanf(“%d”,a); C)scanf(“%d”,&amp;pa); D)scanf(“%d”,*pa);</P>
    <P>21、以下程序段中与语句k=a&gt;b?(b&gt;c?1:0):0;功能等价的是() A)if((a&gt;b)&amp;&amp;(b&gt;c)) k=1; B) if((a&gt;b)||(b&gt;c)) k=1 else k=0; C)if(a&lt;=b) k=0; D)if(a&gt;b) k=1; else if(b&lt;=c) k=1; else if(b&gt;c) k=1; else k=0;</P>
    <P>22、有以下程序 main( ) { char k; int I; for(i=1;i&lt;3;i++) { scanf(“%c”,&amp;k); switch(k) { case ‘0’: printf(“another\n”); case ‘1’: printf(“number\n”); } } } 程序运行时,从键盘输入:01&lt;回车&gt;,程序执行后的输出结果是() A) another B)another C)another D)number number number number number another number</P>
    <P>23、有以下程序 main( ) { int x=0,y=5,z=3; while(z--&gt;0&amp;&amp;++x&lt;5) y=y-1; printf(“%d,%d,%d\n”,x,y,z); } 程序执行后的输出结果是() A)3,2,0 B)3,2,-1 C)4,3,-1 D)5,-2,-5</P>
    <P>24、有以下程序 main( ) { int i,s=0; for(i=1;i&lt;10;i+=2) s+=i+1; printf(“%d\n”,s); } 程序执行后的输出结果是() A)自然数1~9的累加和 B)自然数1~10的累加和 C)自然数1~9中的奇数之和 D)自然数1~10中的偶数之和</P>
    <P>25、有以下程序 main( ) { int i,n=0; for(i=2;i&lt;5;i++) { do { if(i%3) continue; n++; } while(!i); n++; } printf(“n=%d\n”,n); } 程序执行后的输出结果是() A)n=5 B)n=2 C)n=3 D) n=4</P>
    <P>26、若程序中定义了以下函数 double myadd(double a,double b) { return (a+b);} 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是() A)double myadd(double a,b); B)double myadd(double,double); C)double myadd(double b,double a); D)double myadd(double x,double y);</P>
    <P>27、有以下程序 char fun(char x , char y) { if(x的 return y; } main( ) { int a=’9’,b=’8’,c=’7’; printf(“%c\n”,fun(fun(a,b),fun(b,c))); } 程序的执行结果是() A)函数调用出错 B)8 C)9 D)7</P>
    <P>28、设有定义:int n=0,*p=&amp;n,**q=&amp;p;则以下选项中,正确的赋值语句是() A)p=1; B)*q=2; C)q=p; D)*p=5;</P>
    <P>29、有以下程序 void f(int v , int w) { int t; t=v;v=w;w=t; } main( ) { int x=1,y=3,z=2; if(x&gt;y) f(x,y); else if(y&gt;z) f(y,z); else f(x,z); printf(“%d,%d,%d\n”,x,y,z); } 执行后输出结果是() A)1,2,3 B)3,1,2 C)1,3,2 D)2,3,1</P>
    <P>30、有以下程序段 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&amp;a[3],b; b=p[5]; b中的值是() A)5 B)6 C)8 D)9</P>
    <P>31、有以下程序 main( ) { char a[]=”abcdefg”,b[10]=”abcdefg”; printf(“%d %d\n”,sizeof(a),sizeof(b)); } 执行后输出结果是() A)7 7 B)8 8 C)8 10 D)10 10</P>
    <P>32、有以下程序 void swap1(int c[]) { int t; t=c[0];c[0]=c[1];c[1]=t; } void swap2(int c0,int c1) { int t; t=c0;c0=c1;c1=t; } main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]); printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]); } 其输出结果是() A)5 3 5 3 B) 5 3 3 5 C)3 5 3 5 D)3 5 5 3</P>
    <P>33、有以下程序 void sum(int *a) { a[0]=a[1];} main( ) { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i&gt;=0;i--) sum(&amp;aa); printf(“%d\n”,aa[0]); } 执行后的输出结果是() A)4 B)3 C)2 D)1</P>
    <P>34、有以下程序 int f(int b[][4]) { int i,j,s=0; for(j=0;j&lt;4;j++) { i=j; if(i&gt;2) i=3-j; s+=b[j]; } return s; } main( ) { int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\n”,f(a)); } 执行后的输出结果是() A)12 B)11 C)18 D)16</P>
    <P>35、有以下定义 #include  char a[10],*b=a; 不能给数组a输入字符串的语句是() A)gets(a) B)gets(a[0]) C)gets(&amp;a[0]); D)gets(b);</P>
    <P>36、有以下程序 main( ) { char *p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”}; printf(“%d\n”,strlen(p[4])); } 执行后输出结果是() A)2 B)3 C)4 D)5</P>
    <P>37、有以下程序 int a=2; int f(int *a) {return (*a)++;} main( ) { int s=0; { int a=5; s+=f(&amp;a); } s+=f(&amp;a); printf(“%d\n”,s); } 执行后输出结果是() A)10 B)9 C)7 D)8</P>
    <P>38、有以下程序 #define f(x) x*x main( ) { int i; i=f(4+4)/f(2+2); printf(“%d\n”,i); } 执行后输出结果是() A)28 B)22 C)16 D)4</P>
      

  15.   

    如果没有异常,s也对,xml文件空那就比较奇怪了另外一点小问题,应该不影响
     br.close();
     fr.close();
     out.close();
     fw.close();
      

  16.   

    试了试,正常<?xml  version="1.0"  encoding="gb2312"?>
    <试题信息>
    <题干>
    1、 1MB等于() 
    </题干>
    <题干>
    2、 与十六进制数200等值得十进制数为() 
    </题干>
    <题干>
    3、 所谓“裸机“是指() 
    </题干>
    <题干>
    4、 能将高级语言编写的源程序转换为目标程序的是() 
    </题干>
    <题干>
    5、 在64为计算机中,一个字长所占字节数为() 
    </题干>
    <题干>
    6、 在Windows环境下,当一个应用程序窗口被最小化后,该应用程序() 
    </题干>
    <题干>
    7、在Windows环境下,能实现窗口移动的操作是() 
    </题干>
    <题干>
    8、 在Windows环境下,PrintScreen键的作用是() 
    </题干>
    <题干>
    9、 Internet的通信协议是() 
    </题干>
    <题干>
    10、 下列叙述中正确的是() 
    </题干>
    <题干>
    11、一个算法应该具有“确定性”等5个特性,下面对另外4个特性的描述中错误的是 
    </题干>
    <题干>
    12、 以下叙述中正确的是() 
    </题干>
    <题干>
    13、 以下符合C语言语法的实型常量是() 
    </题干>
    <题干>
    14、 以下4组用户定义标识符中,全部合法的一组是() 
    </题干>
    <题干>
    15、 若以下选项中的变量已正确定义,则正确的赋值语句是() 
    </题干>
    <题干>
    16、 设有以下定义 int a=0; double b=1.25; char c=’A’; #define d 2 则下面语句中错误的是() 
    </题干>
    <题干>
    17、 设有定义:float a=2,b=4,h=3;,以下C语言表达式与代数式 计算结果不相符的是() 
    </题干>
    <题干>
    18、 有以下程序 main( ) { int x=102,y=012; printf(“%2d,%2d\n”,x,y); } 执行后输出结果是() 
    </题干>
    <题干>
    19、以下4个选项中,不能看作一条语句的是() 
    </题干>
    <题干>
    20、设有定义:int a,*pa=&amp;a;以下scanf语句中能正确为变量a读入数据的是() 
    </题干>
    <题干>
    21、以下程序段中与语句k=a&gt;b?(b&gt;c?1:0):0;功能等价的是() 
    </题干>
    <题干>
    22、有以下程序 main( ) { char k; int I; for(i=1;i&lt;3;i++) { scanf(“%c”,&amp;k); switch(k) { case ‘0’: printf(“another\n”); case ‘1’: printf(“number\n”); } } } 程序运行时,从键盘输入:01&lt;回车&gt;,程序执行后的输出结果是() 
    </题干>
    <题干>
    23、有以下程序 main( ) { int x=0,y=5,z=3; while(z--&gt;0&amp;&amp;++x&lt;5) y=y-1; printf(“%d,%d,%d\n”,x,y,z); } 程序执行后的输出结果是() 
    </题干>
    <题干>
    24、有以下程序 main( ) { int i,s=0; for(i=1;i&lt;10;i+=2) s+=i+1; printf(“%d\n”,s); } 程序执行后的输出结果是() 
    </题干>
    <题干>
    25、有以下程序 main( ) { int i,n=0; for(i=2;i&lt;5;i++) { do { if(i%3) continue; n++; } while(!i); n++; } printf(“n=%d\n”,n); } 程序执行后的输出结果是() 
    </题干>
    <题干>
    26、若程序中定义了以下函数 double myadd(double a,double b) { return (a+b);} 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是() 
    </题干>
    <题干>
    27、有以下程序 char fun(char x , char y) { if(x的 return y; } main( ) { int a=’9’,b=’8’,c=’7’; printf(“%c\n”,fun(fun(a,b),fun(b,c))); } 程序的执行结果是() 
    </题干>
    <题干>
    28、设有定义:int n=0,*p=&amp;n,**q=&amp;p;则以下选项中,正确的赋值语句是() 
    </题干>
    <题干>
    29、有以下程序 void f(int v , int w) { int t; t=v;v=w;w=t; } main( ) { int x=1,y=3,z=2; if(x&gt;y) f(x,y); else if(y&gt;z) f(y,z); else f(x,z); printf(“%d,%d,%d\n”,x,y,z); } 执行后输出结果是() 
    </题干>
    <题干>
    30、有以下程序段 int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&amp;a[3],b; b=p[5]; b中的值是() 
    </题干>
    <题干>
    31、有以下程序 main( ) { char a[]=”abcdefg”,b[10]=”abcdefg”; printf(“%d %d\n”,sizeof(a),sizeof(b)); } 执行后输出结果是() 
    </题干>
    <题干>
    32、有以下程序 void swap1(int c[]) { int t; t=c[0];c[0]=c[1];c[1]=t; } void swap2(int c0,int c1) { int t; t=c0;c0=c1;c1=t; } main( ) { int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]); printf(“%d %d %d %d\n”,a[0],a[1],b[0],b[1]); } 其输出结果是() 
    </题干>
    <题干>
    33、有以下程序 void sum(int *a) { a[0]=a[1];} main( ) { int aa[10]={1,2,3,4,5,6,7,8,9,10},i; for(i=2;i&gt;=0;i--) sum(&amp;aa); printf(“%d\n”,aa[0]); } 执行后的输出结果是() 
    </题干>
    <题干>
    34、有以下程序 int f(int b[][4]) { int i,j,s=0; for(j=0;j&lt;4;j++) { i=j; if(i&gt;2) i=3-j; s+=b[j]; } return s; } main( ) { int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(“%d\n”,f(a)); } 执行后的输出结果是() 
    </题干>
    <题干>
    35、有以下定义 #include  char a[10],*b=a; 不能给数组a输入字符串的语句是() 
    </题干>
    <题干>
    36、有以下程序 main( ) { char *p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”}; printf(“%d\n”,strlen(p[4])); } 执行后输出结果是() 
    </题干>
    <题干>
    37、有以下程序 int a=2; int f(int *a) {return (*a)++;} main( ) { int s=0; { int a=5; s+=f(&amp;a); } s+=f(&amp;a); printf(“%d\n”,s); } 执行后输出结果是() 
    </题干>
    <题干>
    38、有以下程序 #define f(x) x*x main( ) { int i; i=f(4+4)/f(2+2); printf(“%d\n”,i); } 执行后输出结果是() 
    </题干>
    </试题信息>
      

  17.   

    晕,我的输出怎么就不行啊?
    难道是我用的netbeans有问题?
      

  18.   

    netbeans应该没问题吧
    再仔细看看
      

  19.   

    kingfish
    请问你是用的什么开发工具阿?