串的简单处理(蓝桥杯)

串的简单处理

串的处理
在实际的开发工作中,对字符串的处理是最常见的编程任务。
本题目即是要求程序对用户输入的串进行处理。具体规则如下:

  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 h 1sdf21 1s2 s1f2s3s sdf121 2121sdf

则程序输出:

1 H 1_sdf_21 1_s_2 S_1_f_2_s_3_s Sdf_121 2121_sdf

我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。
每个单词间由1个或多个空格分隔。
假设用户输入的串长度不超过200个字符。

代码如下(含解题思想):

/*
 * 	解题思想:先把一整串根据空格分割成多个字符串,然后对每一个字符串进行操作。
 * 	每一个字符串的操作:用StringBuilder(动态操作字符串)来操作,先判断第一个字符,若是
 *	字母则变为大写后放到StringBuilder里面,然后便利第二个到最后一个字符串,从第二个
 *	开始每一个字符都和前一个字符比较,若和前一个先比都是数字或者都是字母则直接添加到StringBuilder里面,
 *	否则就是该字符和前一个字符不同,在StringBuilder添加该字符之前先添加_,这样就完成了题目中的任务。
 */
import java.util.ArrayList;
import java.util.Scanner;

public class Demo
{
	private static ArrayList<String> stu = new ArrayList<String>();  //存放字符串
	
	public static void Add(char[] c)   //首字母大写,数字字母分割
	{
		StringBuilder sb = new StringBuilder();
		if(c.length==0)            //检查是否合法
		{
			return;
		}
		if(c[0]>='a'&&c[0]<='z')   //先把第一个字符放进去
		{
			sb.append((""+c[0]).toUpperCase());   //第一个字符是字母的情况
		}
		else
		{
			sb.append(c[0]);		//第一个字符是数字的情况
		}
		for(int i=1,t=c.length;i<t;i++)
		{
			if((c[i-1]>='0'&&c[i-1]<='9')&&(c[i]>='0'&&c[i]<='9'))  //该字符和前一个字符都是数字
			{
				sb.append(c[i]);      //不用_分割,直接放进去
			}
			else if((c[i-1]>='a'&&c[i-1]<='z')&&(c[i]>='a'&&c[i]<='z')) //该字符和前一个字符都是字母
			{
				sb.append(c[i]);     //不用_分割,直接放进去
			}
			else
			{
				sb.append("_"+c[i]);    //该字符和前一个字符不同,用_分割
			}
		}
		stu.add(sb.toString());     //放到集合中去
	}
	
	public static void method(String[] a)
	{
		for(int i=0,t=a.length;i<t;i++)
		{
			Add(a[i].toCharArray());  //首字母大写,数字字母分割
		}
	}
	
	public static void print()     //遍历集合
	{
		for(int i=0,t=stu.size();i<t;i++)
		{
			if(i!=0)
			{
				System.out.print(" ");
			}
			System.out.print(stu.get(i));
		}
	}
	
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);
		String s = in.nextLine();
		String[] a = s.split(" ");    //根据空格把字符串切割开
		method(a);					//运算
		print();					//打印输出
	}
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值