A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© JRT 中级黑马   /  2015-5-8 23:51  /  902 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

public class Question2 {
        public static void main(String[] args) {
                Scanner scanner=new Scanner(System.in);
                String string=scanner.nextLine();
                Vector<Character>vector=new Vector<Character>();
                for (int i = 0; i < string.length(); i++) {
                        vector.add(string.charAt(i));
                }
                try {
                        int index=0;
                        while (index<vector.size()) {
                                if(index==0&&vector.elementAt(index)>='a'&&vector.elementAt(index)<='z'){
                                        vector.set(index, (char)(vector.elementAt(index)-('a'-'A')));
                                }else if(vector.elementAt(index-1)==' '&&vector.elementAt(index)==' '){
                                        vector.remove(index);
                                        index--;
                                }else if (vector.elementAt(index-1)==' '&&(vector.elementAt(index)>='a'&&vector.elementAt(index)<='z')) {
                                        vector.set(index, (char)(vector.elementAt(index)-('a'-'A')));
                                }else if((vector.elementAt(index)>='a'&&vector.elementAt(index)<='z')&&(vector.elementAt(index-1)>='0'&&vector.elementAt(index-1)<='9')){
                                        vector.add(index, '_');
                                        index++;
                                }else if((vector.elementAt(index-1)>='a'&&vector.elementAt(index-1)<='z')&&(vector.elementAt(index)>='0'&&vector.elementAt(index)<='9')){
                                        vector.add(index, '_');
                                        index++;
                                }
                                index++;
                        }
                        for (int i = 0; i <vector.size(); i++) {
                                System.out.print(vector.elementAt(i));
                        }
                        System.out.println();
                } catch (ArrayIndexOutOfBoundsException e) {
                        // TODO: handle exception
                }
        }
}
运行结果:
you and     me what  cpp2005program
You And Me What Cpp_2005_program

方法二:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 本题目即是要求程序对用户输入的串进行处理。具体规则如下:
*1.        把每个单词的首字母变为大写。
*2.        把数字与字母之间用下划线字符(_)分开,使得更清晰
*3.        把单词中间有多个空格的调整为1个空格。
*我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。
*假设用户输入的串长度不超过200个字符。
*/
public class SimpleString {
        public static void main(String args[]){
                String str="";
                str=(new Scanner(System.in)).nextLine();
                String []str1=str.split("[ ]+");
                for(int i=0;i<str1.length;i++)str1[i]=String.valueOf((char)(str1[i].charAt(0)+('A'-'a')))+str1[i].substring(1);
                String s="";
                for(int i=0;i<str1.length-1;i++)//System.out.print(str1[i]+" ");
                {
                        s+=str1[i]+" ";
                }
                s+=str1[str1.length-1];
                        Pattern p=Pattern.compile("([0-9]+)");
                        Matcher m=p.matcher(s);
                        String fin="";
                        int st=0;
                        while(m.find()){
                                int start=m.start();
                                int end=m.end();
                                fin+=s.substring(st,start);
                                if(s.charAt(start-1)!=' ')fin+="_";
                                fin+=m.group(1);
                                if(s.charAt(end)!=' ')fin+="_";
                                st=end;
                        }
                        if(st<s.length())fin+=s.substring(st);
                        System.out.println(fin);
        }
}

方法三:
import java.util.Scanner;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
public class Demo02 {  
    public static void print(String[] s){  
        for(int i=0;i<s.length-1;i++){  
            System.out.print(s[i]+" ");  
        }  
        System.out.println(s[s.length-1]);  
    }  
    public static void main(String[] args) {  
        Scanner scan = new Scanner(System.in);  
        String s = scan.nextLine();  
        String[] ss = s.split("[\\s]+");  
        for(int i=0;i<ss.length;i++){  
            String up = (""+ss[i].charAt(0)).toUpperCase(); // 大写   
            StringBuffer sb = new StringBuffer(ss[i]);  
            ss[i] = sb.replace(0, 1, up).toString();  
            Matcher m = Pattern.compile("\\d+").matcher(ss[i]);  
            while(m.find()){  
                String num = new String(m.group());  
                String num2 = num;  
                num2 = "_"+num+"_";     // 数字前添加"_"   
                ss[i] = ss[i].replace(num, num2);  
                if(ss[i].startsWith("_")){  // 去头"_"   
                    ss[i] = ss[i].substring(1);  
                }  
                if(ss[i].endsWith("_")){    // 去尾"_"   
                    ss[i] = ss[i].substring(0,ss[i].length()-1);  
                }  
            }  
        }  
        print(ss);  
    }  
}  


运行结果:
you and     me what  cpp2005program  
You And Me What Cpp_2005_program
[code]串的处理
在实际的开发工作中,对字符串的处理是最常见的编程任务。
本题目即是要求程序对用户输入的串进行处理。具体规则如下:
1.        把每个单词的首字母变为大写。
2.        把数字与字母之间用下划线字符(_)分开,使得更清晰
3.        把单词中间有多个空格的调整为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 Question1_9;
import java.util.Scanner;
import java.util.Vector;

public class Question2 {
        public static void main(String[] args) {
                Scanner scanner=new Scanner(System.in);
                String string=scanner.nextLine();
                Vector<Character>vector=new Vector<Character>();
                for (int i = 0; i < string.length(); i++) {
                        vector.add(string.charAt(i));
                }
                try {
                        int index=0;
                        while (index<vector.size()) {
                                if(index==0&&vector.elementAt(index)>='a'&&vector.elementAt(index)<='z'){
                                        vector.set(index, (char)(vector.elementAt(index)-('a'-'A')));
                                }else if(vector.elementAt(index-1)==' '&&vector.elementAt(index)==' '){
                                        vector.remove(index);
                                        index--;
                                }else if (vector.elementAt(index-1)==' '&&(vector.elementAt(index)>='a'&&vector.elementAt(index)<='z')) {
                                        vector.set(index, (char)(vector.elementAt(index)-('a'-'A')));
                                }else if((vector.elementAt(index)>='a'&&vector.elementAt(index)<='z')&&(vector.elementAt(index-1)>='0'&&vector.elementAt(index-1)<='9')){
                                        vector.add(index, '_');
                                        index++;
                                }else if((vector.elementAt(index-1)>='a'&&vector.elementAt(index-1)<='z')&&(vector.elementAt(index)>='0'&&vector.elementAt(index)<='9')){
                                        vector.add(index, '_');
                                        index++;
                                }
                                index++;
                        }
                        for (int i = 0; i <vector.size(); i++) {
                                System.out.print(vector.elementAt(i));
                        }
                        System.out.println();
                } catch (ArrayIndexOutOfBoundsException e) {
                        // TODO: handle exception
                }
        }
}
运行结果:
you and     me what  cpp2005program
You And Me What Cpp_2005_program

方法二:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 本题目即是要求程序对用户输入的串进行处理。具体规则如下:
*1.        把每个单词的首字母变为大写。
*2.        把数字与字母之间用下划线字符(_)分开,使得更清晰
*3.        把单词中间有多个空格的调整为1个空格。
*我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。
*假设用户输入的串长度不超过200个字符。
*/
public class SimpleString {
        public static void main(String args[]){
                String str="";
                str=(new Scanner(System.in)).nextLine();
                String []str1=str.split("[ ]+");
                for(int i=0;i<str1.length;i++)str1[i]=String.valueOf((char)(str1[i].charAt(0)+('A'-'a')))+str1[i].substring(1);
                String s="";
                for(int i=0;i<str1.length-1;i++)//System.out.print(str1[i]+" ");
                {
                        s+=str1[i]+" ";
                }
                s+=str1[str1.length-1];
                        Pattern p=Pattern.compile("([0-9]+)");
                        Matcher m=p.matcher(s);
                        String fin="";
                        int st=0;
                        while(m.find()){
                                int start=m.start();
                                int end=m.end();
                                fin+=s.substring(st,start);
                                if(s.charAt(start-1)!=' ')fin+="_";
                                fin+=m.group(1);
                                if(s.charAt(end)!=' ')fin+="_";
                                st=end;
                        }
                        if(st<s.length())fin+=s.substring(st);
                        System.out.println(fin);
        }
}

9 个回复

倒序浏览
最近在为蓝桥杯的总决赛努力着,论坛里都好久没来过了,冒个泡
回复 使用道具 举报
不错不错
回复 使用道具 举报
JRT 发表于 2015-5-8 23:53
最近在为蓝桥杯的总决赛努力着,论坛里都好久没来过了,冒个泡

蓝桥杯,虽然不知道是什么,不过感觉就是IT中的奥数一样。加油!
回复 使用道具 举报
1017161726 发表于 2015-5-9 10:13
蓝桥杯,虽然不知道是什么,不过感觉就是IT中的奥数一样。加油!

确实有点奥数的感觉,好变态的题啊,我现在是停课奋斗中,,,,
回复 使用道具 举报

确实有感觉
回复 使用道具 举报
谢谢分析!!
回复 使用道具 举报
JRT 中级黑马 2015-5-13 22:32:28
8#

不客气,只是随便玩玩
回复 使用道具 举报
JRT 中级黑马 2015-6-18 16:09:53
9#
蓝桥杯干完了,战果还是不错的
回复 使用道具 举报
蓝桥杯是干嘛的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马