- 浏览: 547799 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
北月与南安:
哥哥不要秀我,答案是11.38,你算出来36.43,要求N个点 ...
平均距离 -
xiao_android_jun:
[color=red][ size=xx-small ...
Android 之 进程的概念介绍 -
明子健:
小伙子,很有前途哦
《将博客搬至CSDN》 -
1140566087:
dugujiujian 写道R.layout.simple_s ...
Android 之 下拉(Spinner) 组件示例 -
dugujiujian:
R.layout.simple_spinner_dropdow ...
Android 之 下拉(Spinner) 组件示例
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
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个字符。
要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
每种解法都有自己的特点,我写的只是其中的一种,也不一定是正则就是最简单的 !
同意,有时候本来一个简单的问题非要人为的去复杂化,这就是目前我面对的环境,不知道你有没有遇到这样的情况
每种解法都有自己的特点,我写的只是其中的一种,也不一定是正则就是最简单的 !
使用正则啊,可以! 谢啦...
这个,按题目的要求是单词之间留有空格的!不考试连续输入的情况
这样的嗦,首先做整个字符串的空格匹配,也就是说保证第一次过滤后没有重复空格的出现;
然后按照空格分隔成String[],对每一个元素做第一个字符匹配,也就是字符替换大写;最后做下划线匹配,诸如[d][a-z]/[A-Z]或[a-z]/[A-Z][d]做下划线添加。都用正则代码更简单易懂。
虚心受教,请问你有没更精简的方法,更加的明白,如果可以的话,求指导!
这个,按题目的要求是单词之间留有空格的!不考试连续输入的情况
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个字符。
要求考生把所有类写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
package 字符串拼接; import java.util.ArrayList; import java.util.Scanner; //you and me what cpp2005program //则程序输出: //You And Me What Cpp_2005_program public class Main { public static void main(String[] args){ String x = new Scanner(System.in).nextLine(); combineStr(x); } public static void combineStr(String x){ //获取处理后的数据集合 ArrayList<String> list = repair(x); //用于判断数字的字符串 String intStr = "0123456789"; //获取每个字符串进行字符的拼接转换 String result = ""; for(int i=0;i<list.size();i++){ //取出一个字符 String temp = list.get(i); //初始化结果值 result = temp; //进行数字与字母的判断 for(int k=0;k<temp.length()-1;k++){ if(intStr.indexOf(temp.charAt(k))!=-1 && intStr.indexOf(temp.charAt(k+1))==-1){ // 此时判断条件为数字 // 8a 返回替换后的字符,原字符不变 result = result.replace(temp.substring(k, k+2), (temp.charAt(k)+"_"+temp.charAt(k+1))); }else if(intStr.indexOf(temp.charAt(k))==-1 && intStr.indexOf(temp.charAt(k+1))!=-1){ //字母数字 result = result.replace(temp.substring(k, k+2), (temp.charAt(k)+"_"+temp.charAt(k+1))); } } System.out.print(result+" "); } } //获取用户输入的,去掉重复的空白符 public static ArrayList<String> repair(String x){ //保存首字符转为大写后的单词 ArrayList<String> list = new ArrayList<String>(); //用于判断数字的字符串 String intStr = "0123456789"; String[] arr = x.split(" "); for(int i=0;i<arr.length;i++){ if(!arr[i].equals("")){ //对每一个字符进行判断 if( intStr.indexOf(arr[i].charAt(0))==-1){ // 对应的字符为字母而不是数字,==-1表示没有找到数字,则为字母 String newString = (arr[i].charAt(0)+"").toUpperCase()+arr[i].substring(1); list.add(newString); }else{ list.add(arr[i]); } } } return list; } }
评论
9 楼
kjmmlzq19851226
2013-07-09
1140566087 写道
kjmmlzq19851226 写道
不知道你有没有发现一个问题?当你输入a1b2c3d4时,得到的输出为A_1b_2c_3d_4,而不是A_1_b_2_c_3_d_4。因为m.find()会自动设置next index,所以while (m.find()) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}应该修改为int i = 0;while (m.find(i)) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
i++;}
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}应该修改为int i = 0;while (m.find(i)) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
i++;}
每种解法都有自己的特点,我写的只是其中的一种,也不一定是正则就是最简单的 !
同意,有时候本来一个简单的问题非要人为的去复杂化,这就是目前我面对的环境,不知道你有没有遇到这样的情况
8 楼
1140566087
2013-07-08
kjmmlzq19851226 写道
不知道你有没有发现一个问题?当你输入a1b2c3d4时,得到的输出为A_1b_2c_3d_4,而不是A_1_b_2_c_3_d_4。因为m.find()会自动设置next index,所以while (m.find()) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}应该修改为int i = 0;while (m.find(i)) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
i++;}
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}应该修改为int i = 0;while (m.find(i)) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
i++;}
每种解法都有自己的特点,我写的只是其中的一种,也不一定是正则就是最简单的 !
7 楼
kjmmlzq19851226
2013-07-08
不知道你有没有发现一个问题?当你输入a1b2c3d4时,得到的输出为A_1b_2c_3d_4,而不是A_1_b_2_c_3_d_4。因为m.find()会自动设置next index,所以while (m.find()) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}应该修改为int i = 0;while (m.find(i)) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
i++;}
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}应该修改为int i = 0;while (m.find(i)) {
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
i++;}
6 楼
1140566087
2013-07-08
kjmmlzq19851226 写道
public StringBuffer changeString(String content) {
String patSpace = "\\s{2,}"; // 匹配连续空格
content = Pattern.compile(patSpace).matcher(content).replaceAll(" ");
String[] contents = content.split("\\s");
StringBuffer result = new StringBuffer(); // 最终输出
for (String s : contents) {
String patFirst = "^[a-z]"; // 匹配小写首字母
Boolean isLower = Pattern.compile(patFirst).matcher(s).find();
if (isLower) { // 首字母大写
s = Pattern.compile("^[a-z]").matcher(s)
.replaceAll(s.substring(0, 1).toUpperCase());
}
String patOther = "[a-zA-Z]\\d|\\d[a-zA-Z]"; // 匹配数字毗邻字母组合
Matcher m = Pattern.compile(patOther).matcher(s);
while (m.find()) {
// 字母、数字添加下划线分隔
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}
result.append(s).append(" ");
}
return result;
}
String patSpace = "\\s{2,}"; // 匹配连续空格
content = Pattern.compile(patSpace).matcher(content).replaceAll(" ");
String[] contents = content.split("\\s");
StringBuffer result = new StringBuffer(); // 最终输出
for (String s : contents) {
String patFirst = "^[a-z]"; // 匹配小写首字母
Boolean isLower = Pattern.compile(patFirst).matcher(s).find();
if (isLower) { // 首字母大写
s = Pattern.compile("^[a-z]").matcher(s)
.replaceAll(s.substring(0, 1).toUpperCase());
}
String patOther = "[a-zA-Z]\\d|\\d[a-zA-Z]"; // 匹配数字毗邻字母组合
Matcher m = Pattern.compile(patOther).matcher(s);
while (m.find()) {
// 字母、数字添加下划线分隔
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}
result.append(s).append(" ");
}
return result;
}
使用正则啊,可以! 谢啦...
5 楼
kjmmlzq19851226
2013-07-08
public StringBuffer changeString(String content) {
String patSpace = "\\s{2,}"; // 匹配连续空格
content = Pattern.compile(patSpace).matcher(content).replaceAll(" ");
String[] contents = content.split("\\s");
StringBuffer result = new StringBuffer(); // 最终输出
for (String s : contents) {
String patFirst = "^[a-z]"; // 匹配小写首字母
Boolean isLower = Pattern.compile(patFirst).matcher(s).find();
if (isLower) { // 首字母大写
s = Pattern.compile("^[a-z]").matcher(s)
.replaceAll(s.substring(0, 1).toUpperCase());
}
String patOther = "[a-zA-Z]\\d|\\d[a-zA-Z]"; // 匹配数字毗邻字母组合
Matcher m = Pattern.compile(patOther).matcher(s);
while (m.find()) {
// 字母、数字添加下划线分隔
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}
result.append(s).append(" ");
}
return result;
}
String patSpace = "\\s{2,}"; // 匹配连续空格
content = Pattern.compile(patSpace).matcher(content).replaceAll(" ");
String[] contents = content.split("\\s");
StringBuffer result = new StringBuffer(); // 最终输出
for (String s : contents) {
String patFirst = "^[a-z]"; // 匹配小写首字母
Boolean isLower = Pattern.compile(patFirst).matcher(s).find();
if (isLower) { // 首字母大写
s = Pattern.compile("^[a-z]").matcher(s)
.replaceAll(s.substring(0, 1).toUpperCase());
}
String patOther = "[a-zA-Z]\\d|\\d[a-zA-Z]"; // 匹配数字毗邻字母组合
Matcher m = Pattern.compile(patOther).matcher(s);
while (m.find()) {
// 字母、数字添加下划线分隔
s = s.replace(m.group(), m.group().substring(0, 1) + "_" + m.group().substring(1));
}
result.append(s).append(" ");
}
return result;
}
4 楼
kjmmlzq19851226
2013-07-08
1140566087 写道
kjmmlzq19851226 写道
有点儿混乱,代码也不够简洁,像匹配纯数字这种问题最好使用正则。而且处理的问题比较奇怪,如果用户输入youand,你也认为这是一个单词?
这个,按题目的要求是单词之间留有空格的!不考试连续输入的情况
这样的嗦,首先做整个字符串的空格匹配,也就是说保证第一次过滤后没有重复空格的出现;
然后按照空格分隔成String[],对每一个元素做第一个字符匹配,也就是字符替换大写;最后做下划线匹配,诸如[d][a-z]/[A-Z]或[a-z]/[A-Z][d]做下划线添加。都用正则代码更简单易懂。
3 楼
1140566087
2013-07-06
kjmmlzq19851226 写道
有点儿混乱,代码也不够简洁,像匹配纯数字这种问题最好使用正则。而且处理的问题比较奇怪,如果用户输入youand,你也认为这是一个单词?
虚心受教,请问你有没更精简的方法,更加的明白,如果可以的话,求指导!
2 楼
1140566087
2013-07-06
kjmmlzq19851226 写道
有点儿混乱,代码也不够简洁,像匹配纯数字这种问题最好使用正则。而且处理的问题比较奇怪,如果用户输入youand,你也认为这是一个单词?
这个,按题目的要求是单词之间留有空格的!不考试连续输入的情况
1 楼
kjmmlzq19851226
2013-07-05
有点儿混乱,代码也不够简洁,像匹配纯数字这种问题最好使用正则。而且处理的问题比较奇怪,如果用户输入youand,你也认为这是一个单词?
发表评论
-
第100002个素数
2013-07-08 12:59 1841素数就是不能再进行等分的整数。比如:7,11。而9不是 ... -
古代赌局
2013-07-08 12:59 1167【编程题】(满分23分) ... -
地址转换
2013-07-07 16:41 1362【编程题】(满分21分) Excel是最常用的办公 ... -
全排列,精简
2013-07-07 13:49 1141package 全排列; import java.uti ... -
买不到的数目,组合问题
2013-07-06 19:02 1625标题:买不到的数目 小明开了一家糖果店。他别出心裁 ... -
取小数的循环体
2013-07-03 17:17 23251/7 = 0.142857142... 是个无限循环小数。 ... -
使用二进制替代解决全排列问题
2013-06-29 17:04 1473//从键盘读入一个由字母构成的串(不大于30个字符)。 // ... -
双层棱形
2013-05-06 21:04 796import java.io.BufferedWriter; ... -
拍七游戏
2013-05-04 09:25 1958标题:拍7游戏 许多人都曾经玩过“拍七”游戏。规则 ... -
连续平方数
2013-05-04 09:14 1280// 连续平方数 //标题: 连续平方数 // //为了表示 ... -
分解质因式 完数
2013-05-04 08:42 1178// 例如:90 = 2*3*5*5 public cl ... -
最长连续字符
2013-05-03 16:06 1190// 找出一个二进制中连续的 1 或 连续的 0 出现 ... -
跳格子
2013-05-03 14:06 1595//富老师玩跳格游戏,规则如下:从起点开始,每次可以向前跳 ... -
警察110
2013-05-03 14:06 770package com; // 题目:给定:123456 ... -
连续多个数的最小公倍数
2013-05-03 14:07 2486package com; //为什么1小时有60分钟,而 ... -
递归实现字符串反转
2013-05-06 21:05 1416//递归实现字符串反转 public class Tit ... -
孪生素数
2013-05-04 08:42 1868//孪生素数 //所谓孪生素数指的就是间隔为 2 的 ... -
圆周率
2013-05-02 16:30 1051//圆周率 //我国古代数学家对圆周率方面的研究工作 ... -
正方形的回文
2013-05-02 16:23 976import java.util.Scanner; // ... -
字符串处理 镜像对称 中心对称
2013-05-01 09:52 3164package com; public class Sn ...
相关推荐
JAVA的字符串拼接与性能 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码...
* 超大字符串拼接,单个字符串4000、分隔符100,可拼出超4000的超长字符串 * 可自定义指定分隔符separator * 可自定义指定排序字段sequence,对于数字或日期类型的字段,先转为字符串,比如to_char(line, 'FM000'...
RobotFramework字符串拼接 字符串拼接 写case时,由于请求⾥⾯,参数值是个变量,遇到的问题 ⽐如需要增加⼀个配置,请求url,POST⽅法,需要传的参数,key:COMMENTS, value: test comments add hotelCode:${...
sql 多行合并某一列字符串拼接的示例语句
FORTRAN中整(实)型与字符型转换 Fortran字符串操作备忘录 产生序列文件名
将excal批量数据插入到postgresql数据库(目前实现字符串拼接的方式)。。
字符串拼接方式.png来自尚硅谷
用于拼接字符串 格式化多行文本 在我们日常使用中经常会有这样的需求,即将一个字符串集合添加前缀或后缀,本程序为小工具,解决此问题
以太坊开发智能合约时,在solidity中拼接字符串的实现思路和代码。
分割0x02 注释格0x03 标识符标识符来对变量,类型等程序实体命名第个字不能是数字,并且标识符不能是数字或者Go语关键词正确的标识符:错误的0x04 字符串
字符串拼接 聚合函数.rar
Javascript新手入门之字符串拼接与变量的应用 1. 课程大纲 字符串拼接(+)的学习和应用 坐标变换在飞机大战游戏中的应用 2.1 字符串的拼接 在JS中使用“+"号,连接字符串、变量、数值等。 2.2 在警告框...
sql server拼接字符串查询语句。 普通拼接字符串和拼接某一列的所有值。
oracle拼接字符串查询语句。 普通拼接字符串和拼接某一列的所有值。
整理文档,搜刮出一个jquery拼接ajax 的json和字符串拼接的代码,稍微整理精简一下做下分享。 jQuery拼接字符串ajax <form id="myForm" action="#"> <input name="name"/> <input name="age"/>...
ibatis 拼接字符串
字符串拼接 public class 字符串拼接 { public static void main(String[] args) { int[] arr = {1, 2,3}; String s = arrayToString(arr); System.out.println(s); } public static String arrayToString(int...
JAVA的字符串拼接[参照].pdf
《Python字符串拼接方法详解.docx》讲解很详细,很有用
1. 字符串声明 ... 简单的字符串拼接 脚本 1: #/bin/bash # 字面量拼接 # 1. 两个串依次排列即可 # 2. 不能有空格, 否则会报错 # 12 str01=12 echo ${str01} # 引号混合 # 12 str02=1'2' echo ${