`
1140566087
  • 浏览: 559084 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
博客专栏
2c4ae07c-10c2-3bb0-a106-d91fe0a10f37
c/c++ 入门笔记
浏览量:18523
3161ba8d-c410-3ef9-871c-3e48524c5263
Android 学习笔记
浏览量:314078
Group-logo
J2ME 基础学习课程集
浏览量:18736
A98a97d4-eb03-3faf-af96-c7c28f709feb
Spring 学习过程记录...
浏览量:17581
社区版块
存档分类
最新评论

字符串的拼接

阅读更多
在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:
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;
	}
}

1
2
分享到:
评论
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++;}


每种解法都有自己的特点,我写的只是其中的一种,也不一定是正则就是最简单的 !

同意,有时候本来一个简单的问题非要人为的去复杂化,这就是目前我面对的环境,不知道你有没有遇到这样的情况
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++;}


每种解法都有自己的特点,我写的只是其中的一种,也不一定是正则就是最简单的 !
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++;}
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;
}


使用正则啊,可以! 谢啦...
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;
}
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,你也认为这是一个单词?

相关推荐

    fortran字符串拼接

    FORTRAN 字符串拼接 在 Fortran 语言中,字符串拼接是非常重要的操作之一。它可以将整数或实数类型转换为字符串类型,以便于文件命名、数据读取和写入等操作。在本节中,我们将详细介绍 FORTRAN 字符串拼接的方法和...

    以太坊solidity字符串拼接实现

    在以太坊智能合约开发中,处理字符串拼接是一个常见的需求。不过,在Solidity编程语言中,由于其特定的类型系统和内存管理机制,没有像其他高级编程语言(如JavaScript或Python)中那样直接支持字符串拼接运算符。...

    JAVA的字符串拼接与性能

    JAVA的字符串拼接与性能 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码...

    字符串拼接工具

    "字符串拼接工具"就是针对这类需求而设计的小型实用程序。它能够帮助开发者快速、有效地组合多个字符串,添加前缀或后缀,使得多行文本的格式化变得简单。 在编程中,字符串拼接通常是通过字符串连接运算符或者使用...

    sql 多行合并某一列字符串拼接的示例

    在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...

    jquery拼接ajax 的json和字符串拼接的方法

    整理文档,搜刮出一个jquery拼接ajax 的json和字符串拼接的代码,稍微整理精简一下做下分享。 jQuery拼接字符串ajax &lt;form id="myForm" action="#"&gt; &lt;input name="name"/&gt; &lt;input name="age"/&gt;...

    Oracle10g自定义聚合函数(字符串拼接)

    * 超大字符串拼接,单个字符串4000、分隔符100,可拼出超4000的超长字符串 * 可自定义指定分隔符separator * 可自定义指定排序字段sequence,对于数字或日期类型的字段,先转为字符串,比如to_char(line, 'FM000'...

    RobotFramework字符串拼接.pdf

    在Robot Framework中,字符串拼接可以通过内置的`Catenate`关键字实现。`Catenate`提供了多种用法,可以根据实际需求选择合适的方式。 1. **基本用法**: ```robotframework ${result}= Catenate Hello World ``...

    2.Golang的基础语法(分隔符,注释,标识符,字符串拼接,空格)1

    本文将深入探讨四个主要概念:分隔符、注释、标识符以及字符串拼接,同时也会提及空格的使用。 首先,让我们来了解分隔符。与许多其他编程语言(如JAVA和PHP)不同,Golang不需要在每一行末尾添加英文分号(;)。这...

    将excal批量数据插入到postgresql数据库(目前实现字符串拼接的方式)

    在本教程中,我们将聚焦于如何将Excel数据批量导入到PostgreSQL数据库,特别关注一种常见的方法——通过字符串拼接的方式。PostgreSQL是一个功能强大的开源关系型数据库管理系统,而Excel则是广泛使用的电子表格工具...

    字符串拼接方式.png来自尚硅谷

    字符串拼接方式.png来自尚硅谷

    Python字符串拼接方法详解.docx

    Python 字符串拼接方法详解 Python 中的字符串拼接方法有多种,本文将通过实例详细讲解这几种方法的使用及各自的特点。 字符串拼接方法一:使用“+”连接 Python 中最简单的字符串拼接方法是使用“+”连接。例如...

    基于C语言的字符串拼接

    基于C语言的字符串拼接是一种常见的操作,用于将两个或多个字符串合并成一个完整的字符串。在C语言中,字符串实际上是以空字符 '\0' 结尾的字符数组。字符串拼接可以通过标准库函数 strcat 实现,或者手动遍历和复制...

    JAVA的字符串拼接[参照].pdf

    在Java编程中,字符串拼接是一项常见的操作,特别是在构建动态字符串或者处理文本数据时。本文主要探讨了在Java中几种不同的字符串拼接方法的性能差异,包括使用操作符`+`、`String.concat()`、`StringBuffer.append...

    StringBuilder字符串拼接工具

    标题"StringBuilder字符串拼接工具"暗示了我们讨论的核心是关于如何利用`StringBuilder`进行高效的字符串处理。在Java程序中,当需要动态地构建字符串,尤其是在循环或者递归中,`StringBuilder`是首选工具。它的...

    字符串拼接 聚合函数.rar

    在IT领域,字符串拼接和聚合函数是编程中常见的操作,尤其在处理数据时显得尤为重要。字符串拼接是指将两个或多个字符串连接成一个新字符串的过程,而聚合函数则是在一组值上执行计算并返回单个值的函数,通常用于...

    使用C 语言的字符串拼接的函数实现方式详解.docx

    c 字符串拼接C语言 strcat() 函数用来将两个字符串连接(拼接)起来。头文件:string.h语法/原型:char*strcat(char* strDestination, const char* strSource);参数说明:•strDestination:目的字符串;•strSource...

    c++字符串拼接.pdf

    c 字符串拼接在上面的代码中,我们定义了两个字符串`str1`和`str2`,分别赋值为"Hello"和"World!"。然后,我们使用加号运算符将两个字符串拼接起来,并将结果存储在`result`变量中。最后,使用`std::cout`输出拼接后...

Global site tag (gtag.js) - Google Analytics