java对字符串的处理


//字符串的处理要求:

1 把每个单词首字母变成大写

2 将字母与数字之间用下划线(_)分开

3 每个单词中间有多个空格变成一个

例如:this   is a99cat

输出为:This is a 99_cat



代码如下:

import java.util.Scanner;


public class Chuando {

public static void main(String args[])
{
Scanner sca=new Scanner(System.in);
String s=sca.nextLine();
char ch[];
ch=new char[100];
int len=s.length();
int i,m=0;
        for( i=0;i<len;i++)
        {
        ch[i]=s.charAt(i);//将字符串存到数组[]中
        }
        
char line[],blank=' ',line2[];
line=new char[100];
line2=new char[100];
boolean flag1=true,flag2=true,flag3=true;
for(int j=0;j<i;j++)
{
if(ch[j]==blank&&flag1==true)
{
line[m]=ch[j];
m++;
flag1=false;

}//出现第一个空格存进line数组中,同时将flag1变为false,当后面还是空格时就不会再将空格存进line数组,而是j++,继续向下寻找,直到不是空格
else
{
if(flag1==true||ch[j]!=blank)
{
line[m]=ch[j];
m++;
flag1=true;
}//不是空格将该字符存入line1数组中,同时将flag1变为true

}

}
//将ch[]数组中连续的几个空格删去,自己在相关位置加个空格存到line[]中,剩余的字符和存到line[]中,按原来顺序存储
for(int j=0;j<m;j++)
{
if(line[j]==blank)
{
line2[j]=line[j];
   flag2=true;
}//当空格出现时,后面就是一个新的单词,空格后面第一个字符大写,用flag2记录空格出现
else
{
if(flag2==true&&(line[j]<48||line[j]>57))
{
   line2[j]=(char) (line[j]-32);
   flag2=false;
}//空格后面第一个字符,判断它不是数字就大写,将flag2改为false,应为后面单词不要大写----情况1

else if(flag2==true&&(48<=line[j]&&line[j]<=57))
{
   line2[j]=line[j];
   flag2=false;
}//空格后面第一个字符,判断它是数字就不大写,直接存入line2数组,将flag2改为false,应为后面单词不要大写----情况1

else
line2[j]=line[j];//没有出现空格,直接将字符存入line2
}
}

char line3[];
line3=new char[200];
for(int j=0,n=0;j<m;j++)
{
//if(48<=line2[j]&&line2[j]<=57&&48<=line2[j+1]&&line2[j+1]<=57&&flag3==true)
if((line2[j]<48||line2[j]>57)&&48<=line2[j+1]&&line2[j+1]<=57&&flag3==true&&line2[j]!=blank)
{
//line3[n]=blank;
//line3[n+1]=line2[j];
line3[n]=line2[j];
line3[j+1]=blank;
n=n+2;
}



else if(48<=line2[j]&&line2[j]<=57&&48<=line2[j+1]&&line2[j+1]<=57&&flag3==true)
{
//line3[n]='_';
//line3[n+1]=line2[j];
//n=n+2;
line3[n]=line2[j];
n=n+1;
}


else if(48<=line2[j]&&line2[j]<=57&&48<=line2[j+1]&&line2[j+1]<=57&&flag3==false)
{
line3[n]=line2[j];
n++;
flag3=true;//
}

else if(48<=line2[j]&&line2[j]<=57&&(line2[j+1]<=48||57<=line2[j+1])&&line2[j+1]!=blank)
{

line3[n]=line2[j];
line3[n+1]='_';
n=n+2;
flag3=true;//
}

else if(line2[j+1]==blank&&48<=line2[j]&&line2[j]<=57)
{
line3[n]=line2[j];
line3[n+1]=line2[j+1];
n=n+2;
j++;
flag3=false;
}

else
{
line3[n]=line2[j];
n++;
flag3=true;//
}
}

System.out.println(line);
System.out.println(line2);
System.out.println(line3);
//line是先对床[]字符串删去多余空格,存入line中
//line2是对line1字符串进行首字母大写
//line3是对line2数组存放的字符串进行添加下划线操作(两个两个的字符性质比较,都为数字,或是字符加数字,或数字加字符,或空格加字符,...)
        
}



}


运行截图:







评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值