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

解决方案 »

  1.   

    如果用Java实现,
    可以先用string的split方法得到每个单词,
    然后对每个单词进行相应的处理。如果是C/C++,可以通过指针实现。
    设置两个指针p1、p2,二者交替向前处理。
    如p1指向字符串起始处的w时,p2向前移动,遇到空格停止
    然后移动指针p1,同时进行相应处理
    如此这般
      

  2.   


    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();
    }

    }
    哪不懂可以给我留言
      

  3.   

    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());
    }
    }
      

  4.   

    示例代码: 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);
      

  5.   


    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(); // 去除掉空格
    }
    } }
    }
      

  6.   


    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;
        }
    }
      

  7.   

    谢谢各位:下面是我写的代码用正则表达式,测试能行 供参考(没有考虑以数字开头或其他特殊字符情
    况):public class Test {        public static void main(String[]args) throws ClassNotFoundException, 
    SecurityException, NoSuchMethodException, IllegalArgumentException, 
    InstantiationException, IllegalAccessException, InvocationTargetException, 
    NoSuchFieldException, Exception{                BufferedReader br=new BufferedReader(new InputStreamReader
    (System.in));                BufferedWriter bw=new BufferedWriter(new OutputStreamWriter
    (System.out));                StringBuilder sbuider=new StringBuilder();                String line=null;                String line2=null;                                while((line=br.readLine())!=null){                                        Pattern p2=Pattern.compile("([a-zA-Z])+(\\d+)([a-zA-
    Z])+");//正则表达式匹配前面是字符中间是数字后面是字母                        Matcher m2=p2.matcher(line);                        //把有数字的地方替换成_字母_的形式                        while(m2.find()){                                line2=line.replaceAll(m2.group(2), "_"+m2.group
    (2)+"_");//将数值前后加上下划线,这里用到分组                        }                        Pattern p1=Pattern.compile("\\s+");                   //按空白符号把字符串分为数组            String[]arr=p1.split(line2);            for(String s:arr){                    s=s.substring(0,1).toUpperCase()+s.substring(1,s.length());                    sbuider.append(s);                    sbuider.append(" ");//添加一个空白符号                        }            line2=sbuider.toString();                        bw.write(line2);                                                        bw.flush();                                        }望大家指点!!!!
      

  8.   

    我那代码是临时写的,没检查好,方法名没敲好,当时手瘸了
    更正一下方法名,应该是“wordParser”,不是“worldPrase”,我有罪。
      

  9.   

    java基础知识再仔细看看吧、这问题该留给自己敲出来才有意义、