0

我的程序应该打印出姓名的首字母并打印姓氏。例如。如果输入的名称是 Mohan Das Karamchand Gandhi,则输出必须是 MDK Gandhi。虽然我得到一个“字符串索引超出范围”异常。

import java.util.Scanner;
public class name {

public static void main(String[] args) {
    Scanner s=new Scanner(System.in);
    System.out.println("Enter a string");
    String w=s.nextLine();
    int l=w.length();
    char ch=0; int space=0;int spacel = 0;
    for(int i=0;i<l;i++){
        ch=w.charAt(i);
        if(ch==32||ch==' '){
            space+=1;
            spacel=i+1;
            System.out.print(w.charAt(spacel) + " ");
        }            
    }
    System.out.println(w.substring(spacel,l+1));
}
4

3 回答 3

1

这是罪魁祸首:

        spacel=i+1;
        System.out.print(w.charAt(spacel) + " ");

i等于 时l - 1space1将等于lw.length(),超出字符串的末尾。

于 2013-09-24T19:53:11.613 回答
0

这可以使用 String 的 split() 方法或使用 StringTokenizer 轻松实现。

首先使用空格作为分隔符拆分字符串。然后根据您的格式,最后一个字符串将是姓氏并遍历其他字符串对象以获取初始字符。

    String name = "Mohan Das Karamchand Gandhi";
    String broken[] = name.split(" ");
    int len = broken.length;
    char initials[] = new char[len-1];
    for(int i=0;i<len-1;i++) {
        initials[i] = broken[i].charAt(0);
    }
    String finalAns = new String(initials)+" "+broken[len-1];
于 2013-09-24T20:00:15.497 回答
0
import java.util.Scanner;
public class name 
{

  public static void main(String[] args) 
  {
    Scanner s=new Scanner(System.in);
    System.out.println("Enter a string");
    String w=s.nextLine();
    int l=w.length();
    char ch=0; int space=0;int spacel = 0;
    System.out.print(w.charAt(0) + " ");
    for(int i=0;i<l;i++)
    {
    ch=w.charAt(i);
    if(ch==32||ch==' ')
    {
        space+=1;

        spacel=i+1;
        System.out.print(w.charAt(spacel) + " ");

    }            
    }
    System.out.println("\b\b"+w.substring(spacel,l));
    }
    }
于 2013-09-24T20:16:48.350 回答