13行后,插入一句:
input.nextLine();
13行取得输入的整数后,缓冲区里还有"\r\n",上面的语句就释放掉了。

解决方案 »


  1. import java.util.Scanner;public class Insert_Test {
    private static char[]text=new char[10];
    public static void main(String[] args){
    Scanner input=new Scanner(System.in);
    input.useDelimiter("\r\n");
    System.out.print("Please enter a string.");
    String s=input.nextLine();
    text=s.toCharArray();
    System.out.print("Please enter insert position.");
    int n=input.nextInt();
    if(n>=s.length()){
    System.out.println("插入位置大于等于原本string长度,将在原文最后添加");
    n=s.length()+1;
    }
    input.nextLine();
    System.out.print("Please enter insert text.");
    String insert_text=input.nextLine();
    System.out.print("Do you want inset(1 or 0)?");
    int m=input.nextInt();
    System.out.println("原来的是:"+s);
    System.out.println("添加位置:"+n);
    System.out.println("加入内容:"+insert_text);
    if (m==1){
    insert(insert_text,n);
    }
    System.out.print("结果为:");
    for(int i=0;i<text.length;i++){
    System.out.print(text[i]);
    }
    }

    public static void insert(String insert_text,int startposition){    
    int start_point=startposition;
    char[] insert_part=insert_text.toCharArray();
    char[] temp_text=new char[text.length+insert_part.length];
    for(int i=0;i<start_point-1;i++){
    temp_text[i]=text[i];
    } for(int i=0,n=start_point-1;i<insert_part.length;i++,n++){
    temp_text[n]=insert_part[i];
    }
    for(int i=start_point-1+insert_part.length,n=start_point-1;n<text.length;i++,n++){
    temp_text[i]=text[n];
    }
    text=temp_text;
    }
    }试试这个
      

  2. 你声明的那个text没什么用,还不如在main函数里面等sanner输入了哪,改成这样:
    import java.util.Scanner;public class Insert_Test {
    public static void main(String[] args){
    Scanner input=new Scanner(System.in);
    input.useDelimiter("\r\n");
    System.out.print("Please enter a string.");
    String s=input.nextLine();
    char[] text=s.toCharArray();
    System.out.print("Please enter insert position.");
    int n=input.nextInt();
    if(n>=s.length()){
    System.out.println("插入位置大于等于原本string长度,将在原文最后添加");
    n=s.length()+1;
    }
    input.nextLine();
    System.out.print("Please enter insert text.");
    String insert_text=input.nextLine();
    System.out.print("Do you want inset(1 or 0)?");
    int m=input.nextInt();
    System.out.println("原来的是:"+s);
    System.out.println("添加位置:"+n);
    System.out.println("加入内容:"+insert_text);
    if (m==1){
    text=insert(text,insert_text,n);
    }
    System.out.print("结果为:");
    for(int i=0;i<text.length;i++){
    System.out.print(text[i]);
    }
    }

    public static char[] insert(char[] text,String insert_text,int startposition){    
    int start_point=startposition;
    char[] insert_part=insert_text.toCharArray();
    char[] temp_text=new char[text.length+insert_part.length];
    for(int i=0;i<start_point-1;i++){
    temp_text[i]=text[i];
    } for(int i=0,n=start_point-1;i<insert_part.length;i++,n++){
    temp_text[n]=insert_part[i];
    }
    for(int i=start_point-1+insert_part.length,n=start_point-1;n<text.length;i++,n++){
    temp_text[i]=text[n];
    }
    return temp_text;
    }
    }
      

  3. 谢谢啦,还有一个问题,我想要插入一些字符在原有字符里,现在发现第46行和第20行编译无法通过,能帮我看看看么。谢谢
    编译没发现问题,运行时报数组越界错。
    4楼的建议不错。text开始定义没有意义。
    另外,System类有个arraycopy 方法,可以省去循环。
    public static char[] insertBySysytemArrayCopy(char[] text,String insert_text,int startposition){    
          int start_point = startposition;
          char[] insert_part = insert_text.toCharArray();
          char[] temp_text = new char[text.length+insert_part.length];
          System.arraycopy(text, 0, temp_text, 0, start_point -1);
          System.arraycopy(insert_part, 0, temp_text, start_point -1, insert_part.length);
          System.arraycopy(text, start_point - 1, temp_text, insert_part.length + start_point -1, text.length - start_point + 1);
          return temp_text;
      }
      

类似问题 »