所以这是我的程序
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.awt.event.*;
public class Capitalize
{
public static void main(String [] arg)
{
String x = JOptionPane.showInputDialog("Enter Phase");
String y = capsFirst(x);
System.out.println(y);
}
public static String capsFirst(String str)
{
String[] words = str.split(" ");
StringBuilder ret = new StringBuilder();
for(int i = 0; i < words.length; i++)
{
ret.append(Character.toUpperCase(words[i].charAt(0)));
ret.append(words[i].substring(1));
if(i < words.length - 1)
{
ret.append(' ');
}
}
return ret.toString();
}
}
现在问题是我无法弄清楚我需要做什么逻辑嘿这是一个我无法编辑的数字。到达它时不要给我这个错误:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: 0
at java.lang.String.charAt(String.java:646)
at Capitalize.capsFirst(Capitalize.java:36)
at Capitalize.main(Capitalize.java:25)
我必须转换的文字示例是:
伦敦(四个空间)英格兰2015
必须转换为
伦敦(四个空间)英格兰2015
答案 0 :(得分:2)
看一下数组的内容,分割你的字符串作为示例输入:它将是这样的:
{"london", "", "", "", "england", "2015"}
处理其中一个空字符串时出现问题。您可以通过在尝试将其第一个字母大写之前检查words[i]
是否为空来解决此问题(因为没有第一个字母)。
答案 1 :(得分:0)
您可以尝试使用此问题中描述的内容将单词[i]值解析为数字
How to check if a String is numeric in Java
如果isNumber返回true,则不要将其大写,只需将字符串追加到ret
答案 2 :(得分:0)
编辑:看起来@Andy Turner给了你答案,但这是他暗示的代码。
public static String capsFirst(String str)
{
String[] words = str.split(" ");
StringBuilder ret = new StringBuilder();
for(int i = 0; i < words.length; i++)
{
if (words[i].length() == 0){
ret.append(' ');
continue;
}
if (Character.isLetter(words[i].charAt(0))){
ret.append(Character.toUpperCase(words[i].charAt(0)));
ret.append(words[i].substring(1));
}
else{
ret.append(words[i]);
}
if(i < words.length - 1)
{
ret.append(' ');
}
}
return ret.toString();
}
此外,这是一种不同的方法,您可以在char数组中就地执行:
public class Capitalize
{
public static void main(String [] arg)
{
String x = "london england 2015";
String y = capsFirst(x);
System.out.println(y);
}
public static String capsFirst(String str)
{
boolean betweenWords = false;
char[] chars = str.toCharArray();
for(int i = 0; i < chars.length; i++)
{
if (chars[i] == ' '){
betweenWords = true;
continue;
}
if (betweenWords || i == 0){
if (Character.isLetter(chars[i])){
chars[i] = Character.toUpperCase(chars[i]);
}
betweenWords = false;
}
}
return new String(chars);
}
}