关于字符串处理的若干问题!!
要求:用户输入一串单词(不超过50个字符),如
we are at the b2b web
编程实现:
每个单词首字母大写
多个空格只输出一个
数字与字符之间要用“_”间隔
即输出:
We Are At The B_2_b Web 大家帮忙看一下呗!
[解决办法]
package csdn;/** * * @author wyy * on 12.02.26 * */public class Stringtest1 { public static void main(String[] args) { String string = "we are2 at 2the b2222b web "; String[] ss= string.split(" "); StringBuffer sBuffer = new StringBuffer(); for(String s :ss){ sBuffer.append(upperFirstAndAddUnderline(s)+' '); } System.out.println(sBuffer); } public static String upperFirstAndAddUnderline(String string){ StringBuffer sBuffer = new StringBuffer(); if(string!=null){ //判断上一个字母是否是数字 boolean bool = false; for(int i=0;i<string.length();i++){ if(i==0){ //System.out.println(Character.toUpperCase(string.charAt(0))); sBuffer.append(Character.toUpperCase(string.charAt(0))); }else if(Character.isDigit(string.charAt(i))){ if(bool){ sBuffer.append(string.charAt(i)); }else{ sBuffer.append("_"+string.charAt(i)); bool = true; } }else{ if(bool){ sBuffer.append("_"+string.charAt(i)); }else{ sBuffer.append(string.charAt(i)); } bool = false; } } } return sBuffer.toString(); } }
[解决办法]
import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 要求:用户输入一串单词(不超过50个字符), * 如 we are at the b2b web 编程实现: * 每个单词首字母大写 * 多个空格只输出一个 * 数字与字符之间要用“_”间隔 * 即输出: We Are At The B_2_b Web 大家帮忙看一下呗! * * 思路: * 1. 替换空格 * 2. 构建一个StringBuilder,用于存储从原字符串中截取的子字符串 * 3. 创建一个匹配数字的Matcher * 4. 每匹配到一次执行以下四步 * 4.1. 截取上一次匹配处到这次匹配处之间的字符串,append到StringBuilder对象中 * 4.2. 如果匹配到的数字前面有没有空格,则将一个"_"append到StringBuilder对象中 * 4.3. 将匹配到的数字append到StringBuilder对象中 * 4.4. 如果匹配到的数字后面有没有空格,则将一个"_"append到StringBuilder对象中 * 5. 将剩下的字符串截取出来append到StringBuilder对象中 * 6. 创建一个存储最终结果的StringBuilder对象 * 7. 以空格为分割,切割替换空格和数字之后的字符串 * 8. 将每一个切割出来的子字符串转换为字符数组,判断第一个字符是否为小写字母,如果是, * 则转换为大写字母,然后将该字符数组存储到存储最终结果的StringBuilder对象中 * @author wlxxsj * */public class WordDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String srcWord = sc.nextLine(); sc.close(); //1. 替换空格 srcWord = srcWord.replaceAll(" {2,}", " "); //2. 构建一个StringBuilder,用于存储从原字符串中截取的子字符串 StringBuilder numReplaced = new StringBuilder(); //3. 创建一个匹配数字的Matcher Pattern p = Pattern.compile("\\d+"); Matcher m = p.matcher(srcWord); //4. 替换数字 int startIndex = 0; int matchedStartIndex = 0, matchedEndIndex = 0; while (m.find()) { matchedStartIndex = m.start(); matchedEndIndex = m.end(); //4.1. 截取上一次匹配处到这次匹配处之间的字符串,append到StringBuilder对象中 numReplaced.append(srcWord.substring(startIndex, matchedStartIndex)); //4.2. 如果匹配到的数字前面有没有空格,则将一个"_"append到StringBuilder对象中 if (matchedStartIndex > 0 && srcWord.charAt(matchedStartIndex-1) != ' ') { numReplaced.append("_"); } //4.3. 将匹配到的数字append到StringBuilder对象中 numReplaced.append(m.group()); //4.4. 如果匹配到的数字后面有没有空格,则将一个"_"append到StringBuilder对象中 if (matchedEndIndex < srcWord.length() && srcWord.charAt(matchedEndIndex) != ' ') { numReplaced.append("_"); } startIndex = matchedEndIndex; } //5. 将剩下的字符串截取出来append到StringBuilder对象中 numReplaced.append(srcWord.substring(matchedEndIndex, srcWord.length())); srcWord = numReplaced.toString(); //6. 创建一个存储最终结果的StringBuilder对象 StringBuilder target = new StringBuilder(); //7. 以空格为分割,切割替换空格和数字之后的字符串 String[] srcs = srcWord.split(" "); //8. 将每个单词转换为字符数组,然后把第一个字符搞成大写 for (String src : srcs) { char[] chs = src.toCharArray(); char ch = chs[0]; if (ch >= 97 && ch <= 122) { chs[0] -= 32; } target.append(chs); target.append(" "); } System.out.println(target.toString()); }}
[解决办法]
示例代码:
String str = "we are at the b2b web"; char last = 0; StringBuilder buff = new StringBuilder(); for(char ch : str.toCharArray()){ switch (last) { case 0: buff.append(Character.toUpperCase(ch)); break; case ' ': case '\t': if(ch==' ' || ch=='\t'){ continue; }else{ buff.append(Character.toUpperCase(ch)); } break; default: if(last>='0' && last<='9'){ buff.append('_').append(ch); }else if(ch>='0' && ch<='9'){ buff.append('_').append(ch); }else{ buff.append(ch); } break; } last = ch; } System.out.println(buff);
[解决办法]
package com.walkman.exercise.one;/** * 要求:用户输入一串单词(不超过50个字符),如we are at the b2b web 编程实现: * 每个单词首字母大写,多个空格只输出一个,数字与字符之间要用“_”间隔 即输出: We Are At The B_2_b Web * */public class ChangeFormatOfWord { public static void main(String[] args) { String str = "ab Cd ef"; new ChangeFormatOfWord().change(str); } public void change(String str) { // 判断字符串不能为空,否则直接退出 if ("".equals(str)) { System.out.println("您输入的是空字符串"); return; } // 改写上面的程序 while (true) { int loc = str.indexOf(" "); char initialLetter = str.charAt(0); if (loc == -1) { // 截取到没有空格或者字符串一个空格也没有 if (initialLetter >= 'a' && initialLetter <= 'z') { str = str.replace(initialLetter, (char) (initialLetter - 32)); // 如果为小写则转换 System.out.println(str); } else { System.out.println(str); } break; } else { if (initialLetter >= 'a' && initialLetter <= 'z') { System.out.println(str.substring(0, loc).replace( initialLetter, (char) (initialLetter - 32))); // 如果为小写则转换 } else { System.out.println(str.substring(0, loc)); } str = str.substring(str.indexOf(" ") + 1).trim(); // 去除掉空格 } } }}
[解决办法]
import java.util.regex.Matcher;import java.util.regex.Pattern;public class test { public static void main(String[] args) { String content = "we are at the b2b web"; String[] str = content.split(" "); StringBuilder sb = new StringBuilder(""); for (int i = 0, len = str.length; i < len; i++) { if (i != 0) { sb.append(" ").append(worldPrase(str[i])); } else { sb.append(worldPrase(str[i])); } } System.out.println(sb.toString()); } public static String worldPrase(String content) { String pattern = "([a-z])(.*)"; Matcher matcher = Pattern.compile(pattern).matcher(content); if (matcher.matches()) { char head = (char) (content.charAt(0) - 32); content = head + matcher.group(2); } pattern = "\\d+|[a-zA-Z]+";// 仅是数字或字母的情况,不需要加"_"的逻辑 StringBuilder sb = new StringBuilder(""); matcher = Pattern.compile(pattern).matcher(content); if (!matcher.matches()) { String temp = content + "_";// 分析结束标志 while (!temp.equals("_")) { pattern = "(\\d+)(.*)|([a-zA-Z]*)(.*)"; matcher = Pattern.compile(pattern).matcher(temp); if (matcher.matches()) { int i = 1; if (matcher.group(1) == null) { i = 3; } if (temp.equals(content + "_")) { sb.append(matcher.group(i)); } else { sb.append("_").append(matcher.group(i)); } temp = matcher.group(i + 1); } } } String result = sb.toString(); if (result.length() < content.length()) { result = content; } return result; }}