我想将“/*  */”部分用大写输出,下面是我自己写的程序,编译时没错,但是运行的结果确是空白,请高手指点。import java.io.*;
public class ceshi 
{public static void main(String args[])
 {String ss="/* put stream*/ ";
  char a[]=ss.toCharArray();
  for(int i=0;i<=a.length-1;i++)
  {if(a[i]=='/'&&a[i+1]=='*')
    {  int m=i+2;
     if(a[i]=='*'&&a[i+1]=='/')
      {int n=i-1;
   String s1=new String(a,m,n);
   String s2=s1.toUpperCase();
   System.out.print(""+s2);}
    }  }
 }
}

解决方案 »

  1.   


    import java.io.*;
    public class ceshi {
    public static void main(String args[]) {
    String ss="/* put stream*/ ";
       char a[]=ss.toCharArray();
       int m=-1,n=-1;
       for(int i=0;i <=a.length-1;i++) {
       if(a[i]=='/'&&a[i+1]=='*')
       m=i+2;
       if(a[i]=='*'&&a[i+1]=='/') 
         n=i-2;
         if(m!=-1 && n!=-1) {
    String s1=new String(a,m,n);
    String s2=s1.toUpperCase();
    System.out.print(""+s2);
    m=-1;
    n=-1;
    }
    }
    }
    }
      

  2.   

    class ceshi {
    public static void main(String args[]) {
    String ss="/* put stream*/ "; 
       char a[]=ss.toCharArray();
       int m = 0,n = 0;
       for(int i=0;i <=a.length-1;i++) {
       if(a[i]=='/'&&a[i+1]=='*') {
       m=i+2; 
       continue;
         }
        if(a[i]=='*'&&a[i+1]=='/') {
    n=i; 
    continue;
    }
       } 
       String s1=new String(a,m,n - m); 
    String s2=s1.toUpperCase(); 
    System.out.print(""+s2);

    }返回
     PUT STREAM
      

  3.   

    你的if语句嵌套了,导致第二个不能有效使用。两个if应该是并列的。
      

  4.   

    (a[i]=='/'&&a[i+1]=='*')
    (a[i]=='*'&&a[i+1]=='/') 
    对于同一个i,不可能同时满足,
    所以m,n应该在for循环外面声明
      

  5.   

    怎么把第二个判断写到了第一个判断里面呢?
    满足了if(a[i]=='/'&&a[i+1]=='*') 之后,在i没有变动的情况下,又怎么能够满足if(a[i]=='*'&&a[i+1]=='/') 呢?
    既然不能,那么下面的块儿肯定是不能执行到的。
     {int n=i-1; 
      String s1=new String(a,m,n); 
      String s2=s1.toUpperCase(); 
      System.out.print(""+s2);} 
        }
      

  6.   

    public class Ceshi 
    {
    public static void main(String args[]) 
    {
    String ss="/* put stream*/ "; 
    char a[]=ss.toCharArray(); 
    int m = 0;
    int n = 0;
    for(int i=0;i <=a.length-1;i++) 
    { if(a[i]=='/'&&a[i+1]=='*') 
    {  
    m=i+2; 

    if(a[i]=='*'&&a[i+1]=='/') 
    {
    n=i; 
    String s1=new String(a,m,n-m); 
    String s2=s1.toUpperCase(); 
    System.out.print(s2);



    }
      

  7.   

    public class test {
    public static void main(String args[]) 
    {String ss="/* put/* stream*/ "; 
     System.out.print(ss.substring(ss.indexOf("/*")+2, ss.lastIndexOf("*/")).toUpperCase());

    }
      

  8.   

    YOU CAN TRY IT YOUR SELF 。
      

  9.   

    这个代码是挺少把字符串的用法综合在一条语句中了,但是只能输出一个注释“/* */”中的内容,能否把所有的注释都扫描出来?
    用ss.indexOf("/*")获取位置碰到有几个解释符,而且有些“/*input/*Stream*/”这样中间夹带有“/*”或“*/”又怎么办呢?
      

  10.   

    public class ceshi{
    public static void main(String args[]){

    String ss="/* put stream*/ ";
    char a[]=ss.toCharArray();
    int m=0,n=0; for(int i=0;i <=a.length-1;i++){ if(a[i]=='/' && a[i+1]=='*'){
    m=i+2;
    }
    if(a[i]=='*' && a[i+1]=='/'){
         n=i-m;//注意这里
                            }
    }
      String s1=new String(a,m,n);
      String s2=s1.toUpperCase();
      System.out.print(""+s2);
        }
    }import java.io.*;引入的包没有用到。两个在for中的if语句是并列的,LZ要对程序要在总体上有个大的轮廓。
    避免数组的越界,一般这样写if(a[i]=='*' && a[i-1]=='/'){}
    if(a[i]=='/' && a[i-1]=='*') {}还有一个问题是函数,String(byte[] bytes, int offset, int length)参数的意思。
      

  11.   

    楼主注意
    String
    public String(char[] value,
                  int offset,
                  int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。offset 参数是子数组第一个字符的索引,count 参数指定子数组的长度。该子数组的内容已被复制;后续对字符数组的修改不会影响新创建的字符串。 参数:
    value - 作为字符源的数组。
    offset - 初始偏移量。
    count - 长度。 
    所以你的String s1=new String(a,m,n); 是肯定不对的。还有就是那两个if语句应该并列
      

  12.   

    class  Test{
        public static void main(String args[]) {
            String ss="/* put stream*/ "; 
              char a[]=ss.toCharArray();
              int m = 0,n = 0;
              for(int i=0;i <=a.length-1;i++) {
                  if(a[i]=='/'&&a[i+1]=='*') {
                      m=i+2; 
                      continue;
                }
                if(a[i]=='*'&&a[i+1]=='/') {
                    n=i; 
                    continue;
                }
              } 
              String s1=new String(a,m,n - m); 
            String s2=s1.toUpperCase(); 
            System.out.print(""+s2);
        } 
    }
    应该让两个if语句编程并列的就好了
      

  13.   

    import java.io.*; 
    public class ceshi {
      public static void main(String args[]){
        String ss="/* put stream*/ "; 
         char a[]=ss.toCharArray(); 
          for(int i=0;i <=a.length-1;i++){
           if(a[i]=='/'&&a[i+1]=='*'){ 
              int m=i+2; 
                if(a[i]=='*'&&a[i+1]=='/'){
                 int n=i-1; 
                 String s1=new String(a,m,n); 
                 String s2=s1.toUpperCase(); 
                 System.out.print(""+s2);} 



    }
      

  14.   

    用正则做了一个:
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String regex = "/\\*(.*?)\\*/";
        String ss="/* put stream*/ ";
        Matcher m = Pattern.compile(regex).matcher(ss);
        while(m.find())
            System.out.println(m.group(1).toUpperCase());
    }
      

  15.   

    问题有两个:
    1、if语句嵌套,导致第二个不能有效使用。
    2、(a[i]=='/'&&a[i+1]=='*')和(a[i]=='*'&&a[i+1]=='/');对于同一个i,不可能同时满足,所以m,n应该在for循环外面声明。
    Java Code
    import java.io.*; 
    public class ceshi{
    public static void main(String args[]) {
    String ss="/* put stream*/ "; 
            char a[]=ss.toCharArray(); 
    int n=0,m=0;
            for(int i=0;i <=a.length-1;i++)  {
    if(a[i]=='/'&&a[i+1]=='*') {
                   m=i+2; }
                if(a[i]=='*'&&a[i+1]=='/') {
       n=i-1; }
       }
      String s1=new String(a,m,n); 
      String s2=s1.toUpperCase(); 
      System.out.print(""+s2);
      } 

    运行结果:
    PUT STREAM