题目:在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
把每个单词的首字母变为大写。 把数字与字母之间用下划线字符(_)分开,使得更清晰 把单词中间有多个空格的调整为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);}
}