读书人

关于字符串处理的若干有关问题!

发布时间: 2012-03-15 11:50:39 作者: rapoo

关于字符串处理的若干问题!!
要求:用户输入一串单词(不超过50个字符),如
we are at the b2b web
编程实现:
每个单词首字母大写
多个空格只输出一个
数字与字符之间要用“_”间隔
即输出:
We Are At The B_2_b Web 大家帮忙看一下呗!

[解决办法]

Java code
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();    }    }
[解决办法]
Java code
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());    }} 


[解决办法]
示例代码:

Java code
        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);
[解决办法]
Java code
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(); // 去除掉空格            }        }    }}
[解决办法]
Java code
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;    }} 

读书人网 >J2SE开发

热点推荐