我是Java的新手,我正在学习如何使用substing选项。 我正在尝试制作一个以提供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)
而且我不知道这是什么意思,因为我是编程新手。 对不起,英语不好。谢谢您的帮助
答案 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