列出Java字符串中的字母列表

时间:2018-09-11 02:26:29

标签: java substring string-length

我是Java的新手,我正在学习如何使用substing选项。  我正在尝试制作一个以提供3个选项的菜单开头的程序。

  1. 写一个字符串
  2. 列出字符串中的字符 订单(例如:字母1:H字母2:E字母3:L字母4:L字母5:O) 在处,它将说出字符和空格的数量 字符串了。
  3. 退出

我编写了以下代码:

public class LEtras {
static String frase="" , letra="",salida="";
static int Espacios=0, noletras=0;
public static void Frase() {

    frase = JOptionPane.showInputDialog("Ingrese una frase");
    int x = frase.length();
     for(int i=0;i<x;i++){
        letra = frase.substring(x);
                if(" ".equals(letra)){
                     Espacios++;
                } else {
                   noletras++;
        }             
    }
     Menu();
}
public static void imprimir() {
    int f = frase.length();
             for(int i=0;i<f;i++){
                 letra = frase.substring(f);
                 salida+="Letra " + (i+1) + ": "+letra;
             }
             JOptionPane.showMessageDialog(null,salida,"Salida",2);
}
public static void Menu(){
          int op = 0;
    do{
        op = Integer.parseInt(JOptionPane.showInputDialog("Menu principal" + "\n 1)Frase 2)Datos 3)Salir"));
        switch(op){
            case 1 : Frase();break;
            case 2 : imprimir();break;
            default : JOptionPane.showMessageDialog(null,"SALIENDO","SALIR",2); break;
        }
    }while(op<=2);
}
public static void main(String[] args) {
    Menu();
}

我在这段代码上有一些问题,第一个是在制作列表时只打印(Letra 1:Letra2:Letra3 :),它不打印字符串中的字符,而且我也不知道如何在第二个选项中的字符串末尾,im将放置空格数和字符数。我也有这个错误:

Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:542)
at java.lang.Integer.parseInt(Integer.java:615)
at Metodos.LEtras.Menu(LEtras.java:43)
at Metodos.LEtras.main(LEtras.java:52)

而且我不知道这是什么意思,因为我是编程新手。 对不起,英语不好。谢谢您的帮助

1 个答案:

答案 0 :(得分:0)

在处理字符串中的索引时需要非常小心,您需要记住,字符的索引从0开始,字符串的最后一个字符落在比字符串的长度小1的索引处。 / p>

由于您正在写int f = frase.length();,所以这意味着f是您字符串的长度。在这个yopur tryng之后,通过以下语句找到子字符串:

letra = frase.substring(f);

因此,letra中的值将为null,因为在索引f处,字符串中将没有任何内容(因为字符串以f-1结尾)。这就是为什么您得到 Letra 1:Letra2:Letra3 作为输出的原因。

在选项2中调用imprimir()时也会出现类似的问题。

letra = frase.substring(f);
salida+="Letra " + (i+1) + ": "+letra;

同样,您会感到null。由于i+1将是一个整数,并且您试图将其与null相连,这就是您面对NumberFormatException

的原因