题目:在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:

     把每个单词的首字母变为大写。
     把数字与字母之间用下划线字符(_)分开,使得更清晰
    把单词中间有多个空格的调整为1个空格。
   例如:
   用户输入:
  you and     me what  cpp2005program
   则程序输出:
  You And Me What Cpp_2005_program
   用户输入:
  this is     a      99cat
  则程序输出:
  This Is A 99_cat
   我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。
   假设用户输入的串长度不超过200个字符。

package com.wtu.lemon.format;

import java.util.Scanner;

/**
 *
 * @author dell
 *在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
     把每个单词的首字母变为大写。
     把数字与字母之间用下划线字符(_)分开,使得更清晰
    把单词中间有多个空格的调整为1个空格。
   例如:
   用户输入:
  you and     me what  cpp2005program
   则程序输出:
  You And Me What Cpp_2005_program
   用户输入:
  this is     a      99cat
  则程序输出:
  This Is A 99_cat
   我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。
   假设用户输入的串长度不超过200个字符。
 */
public class StringFormat {

  //格式化输入字符串

  public static String format(String source){
   //删除多余的空格
   String tem = deleteSpace(source);
   //用来存放输出字符串
   String result = "";
   //将除掉多余空格字符串按空格拆分,实际上拆分之后字符串还是会含有空格[you, and, me, what, cpp2005program]
   String[] str = tem.split(" ");
  
  for (int i = 0; i < str.length-1; i++) {
    //将数字和字母之间隔开,形成新的字符串加上一个空格区分
   result += separator(str[i])+" ";
  }
  //最后一个字符串不用加一个空格
  result += separator(str[str.length-1]);
   return result;
  }
  //删除空格
     public static String deleteSpace(String str){
      //利用正则表达式进行替换
      String result = str.trim().replaceAll("\\s+"," ");
   return result;
  }
     //分隔
     public static String separator(String str){
      int i = 0;
      boolean flags = false;
  
      String result = "";
      //如果第一个字符出现了字母
      if(str.charAt(0) >= 97 && str.charAt(0) <=122){
       result += (char)(str.charAt(0)-32);  //将其转换成大写
       while(++i < str.length()){   //扫描字符串序列
           if(str.charAt(i) >= 48 && str.charAt(i) <= 57){  //如果出现数字
            if(!flags){                  //如果是在字母之后第一次出现数字就加上下划线分隔
             result += "_"+str.charAt(i);
             flags = true;
           
            }else
             result += str.charAt(i);    //否则直接添加
           }else{
            if(flags){       //如果在出现数字之后再次出现字母,就要再次区分
              result +="_"+str.charAt(i);
              flags = false;
             
            }else
             result += str.charAt(i);
           
           }
          }
      }
      else{   //第一个是数字
       result += str.charAt(0);
          while(++i < str.length()){
           if(str.charAt(i) >= 97 && str.charAt(i) <= 122){
            if(!flags){
             result += "_"+str.charAt(i);
             flags = true;
            }else
             result += str.charAt(i);
           }else{
            if(flags){
            result += str.charAt(i);
            flags = false;
            }else
             result += str.charAt(i);
           }
          }   //注释同上
      }
     
     
      return result;
     }
 /**
  * @param args
  */
 public static void main(String[] args) {
  System.out.println("请输入要处理的字符串:");
  Scanner scan = new Scanner(System.in);
  String source = scan.nextLine();
  String destination = format(source);
  System.out.println("格式化后的字符串是:");
  System.out.println(destination);
  

 }

}