2015-04-01 42 views
1

所以这是我的计划大写字符串中的话,但在java中的字符串中跳数和多余的空格或符号

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

编辑:它看起来像@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(); 
    } 

而且,这里是一个不同的方法,你可以在字符数组做就地:

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); 
    } 
} 
+1

这实际上是一个很好的方法。我测试了多种方式,并且能够非常轻松地遵循逻辑。再次感谢你。 – 2015-04-02 01:25:11

+0

@PatrickRoanhouse一定要接受答案,如果它帮助你! – 2015-04-02 19:31:01

2

查看数组的内容,将字符串拆分为示例输入:它将如下所示:

{"london", "", "", "", "england", "2015"} 

处理其中一个空字符串时出现问题。您可以通过检查words[i]是否为空来解决此问题,然后尝试大写首字母(因为没有第一个字母)。

+0

嗯,我想通了这一点,但我不知道,当我得到了一些会发生什么?什么是不修改和将这些非单词拆分转换为新字符串然后输出的最佳方式? – 2015-04-01 23:05:04

+0

如果字符是数字(或者没有大写字母),则Character.toUppercase不起作用。就像对待其他人一样对待这样的“话语”。 – 2015-04-01 23:10:05

相关问题