标题: 关于字符串处理的问题 [打印本页] 作者: 王晓东 时间: 2012-6-3 09:11 标题: 关于字符串处理的问题 要求:用户输入一串单词(不超过50个字符),如
we are at the b2b web
编程实现:
每个单词首字母大写
多个空格只输出一个
数字与字符之间要用“_”间隔
即输出:
We Are At The B_2_b Web 大家帮忙看一下呗!作者: 张少威 时间: 2012-6-3 09:18
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对象中 * * */ 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 pp = "";
ArrayList al = new ArrayList();
String t = "";
s = s.replace(" ", "*") + "*";
for (int i = 1; i < s.length(); i++) {
char im = s.substring(i - 1, i).charAt(0);
char in = s.substring(i, i + 1).charAt(0);
if ((in <= '9' && in >= '0' && im >= 'a' && im <= 'z')
|| (im <= '9' && im >= '0' && (in >= 'a' && in <= 'z'))) {
pp += s.substring(i - 1, i) + "_";
} else {
pp += s.substring(i - 1, i);
}
}
pp = pp + "*";
for (int i = 0; i < pp.length(); i++) {
if (pp.substring(i, i + 1).equals("*")) {
al.add(t);
t = "";
continue;
} else {
t += pp.substring(i, i + 1);
}
}
for (int i = 0; i < al.size(); i++) {
if (al.get(i) != "")
System.out.print(al.get(i).toString().substring(0, 1)
.toUpperCase()
+ al.get(i).toString().substring(1) + " ");
}
}作者: 黑马11期李项京 时间: 2012-6-3 13:15