1. 字符串字母大小写转换
问题描述:设计一个方法, 将一个字符串中的内容大小写转换, 并返回转换后的字符串
代码实现:
import java.util.Scanner;
public class CaseWriteTest {
@SuppressWarnings("resource")
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("请输入一个字符串:");
String str=sc.next();
StringBuffer newstr=CaseWrite(str);
System.out.print(newstr);
}
// 大小写转换 参数:字符串 返回值:字符串
public static StringBuffer CaseWrite(String str){
String upStr=str.toUpperCase();
String lowStr=str.toLowerCase();
StringBuffer sb=new StringBuffer(str.length());
for(int i=0;i<str.length();i++){ //判断大小写
if(str.charAt(i)==upStr.charAt(i)){
sb.append(lowStr.charAt(i)); //转小写
}
else {
sb.append(upStr.charAt(i)); //转大写
}
}
return sb;
}
}
2. 统计子字符串的次数
问题描述:获取一个字符串 "kk" 在另一个 "abkkcdkkefkkskk" 字符串中出现的次数。
思路:
1)定义个计数器。
2)获取kk第一次出现的位置。
3)从第一次出现位置后剩余的字符串中继续获取kk出现的位置。每获取一次就计数一次。
4)当获取不到时,计数完成
代码实现:
public class CatchSub {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="abkkcdkkefkkskk";
System.out.println(str);
System.out.print("字符串kk在字符串中出现的次数:"+Huoqu(str));
}
public static int Huoqu(String str){
String s="kk";
int count=0; //用于计数
int index=0; //表市子字的下标
while((index=str.indexOf(s))!=-1){ //循环判断是否找到子串
count++;
str=str.substring(index+s.length()); //截取子串第一次出现之后的大子串
}
return count;
}
}
3. 字符串常见题目
问题描述: 已知字符串:"this is a test of java" 执行以下操作:
1)统计出字符串中s出现的次数
2)取出字符串中"test"
3)将字符串转换成一个字符数组
4)将字符串中每个单词的第一个字母变成大写,输出到控制台
5)将字符串是此案倒叙输出 "java of test a is this
代码实现:函数调用
import java.util.Arrays;
public class StringTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="this is a test of java";
int count=Statistic(str);
System.out.println("子串出现的次数:"+count);
System.out.println("取出子串:"+subString(str));
char[] ch=str.toCharArray();
System.out.print("字符串转换字符数组:"+Arrays.toString(ch));
System.out.println();
StringBuffer sb=upperFrist(str);
System.out.println("每个单词首字母大写的字符串:"+sb);
System.out.println("倒序输出为:"+Flashback(str));
}
// 统计子串次数 参数: 字符串 返回值:次数
public static int Statistic(String str){ // 相比于上一题较优化
int count=0;
for(int i = 0;i<str.length();i++) {
if(str.charAt(i) == 's') {
count++;
}
}
return count;
}
//取子串 参数:字符串 返回值:子串
public static String subString(String str){
int begin=str.indexOf("test"); //需要先确定test在什么位置出现 即开始的位置
String s=str.substring(begin,(begin+"test".length()));
return s;
}
//首字母大写 参数:字符串 返回值:字符串
public static StringBuffer upperFrist(String str){
//拆分 String类的split 方法
String[] split=str.split(" "); //将字符串按空格进行拆分,得到每一个单词 依旧还是字符串
//当前数组中存储的是每一个单词 仍是字符串,要操作字符串中的每一个首字母,需将其转换为字符串
char[] crr;
StringBuffer sb=new StringBuffer();
for(String s:split){ //取出每一个单词
crr=s.toCharArray();
crr[0]=(char)(crr[0]-32);
for(int i=0;i<crr.length;i++){
sb.append(crr[i]);
}
sb.append(" ");
}
return sb;
}
//倒叙输出
public static String Flashback(String str){
String[] split=str.split(" "); //拆分
for(int i=0;i<split.length/2;i++){
String temp=split[i];
split[i]=split[split.length-i-1];
split[split.length-i-1]=temp;
}
//String类的join静态方法作用是根据第一个参数的连接符,对数组中的字符串进行连接
String newStr=String.join(" ",split);
return newStr;
}
}
说明:代码中用到的for (String s: split){} 循环解释,其中的 s 是遍历后赋值的变量,split 是待遍历的对象。
for的循环语句for(String s : args)这个格式是foreach的形式,表示取出数组args[]中的每一个元素,就是循环一次就依次取出一个元素赋值给s,直到取完为止,java中的foreach也是用for来表示,具体语法分两种:
第一种数组 for(type var : arr) {//循环体} 示例(这里以List为例):这里的 arr 必须是字符串数组
List<String> list = new ArrayList<String>();
for(String item : list){
System.out.println("循环元素:" + item);
}
第二种非数组类,可迭代对象 for(type var : coll) {//循环体} 示例:
Map<String, String> map = new HashMap<String, String>();
for(Entry<String, String> item : map.entrySet()){
System.out.println("循环元素 key:" + item.getKey() + " value:" + item.getValue());
}
代码打印结果:
4. 子串反转
问题描述:将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg";abfedcg
思路:1)曾经学习过对数组的元素进行反转。
2)将字符串变成数组,对数组反转。
3)将反转后的数组变成字符串。
4)只要将或反转的部分的开始和结束位置作为参数传递即可。
代码实现:
import java.util.Scanner;
public class FanZhuan {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.print("请输入字符串:");
String str=sc.next();
System.out.print("请输入开始位置:");
int begin=sc.nextInt();
System.out.print("请输入结束位置:");
int end=sc.nextInt();
String newStr=Reversal(str,begin,end);
System.out.println("反转后的字符串:"+newStr);
}
//字符数组反转
public static String Reversal(String str,int begin,int end){
String subStr=str.substring(begin,end+1);
/*
// 使用String 转字符数组实现
char[] crr=subStr.toCharArray();
for(int i=0;i<crr.length/2;i++){
char temp=crr[i];
crr[i]=crr[crr.length-1-i];
crr[crr.length-1-i]=temp;
}
String newStr=new String(crr); //字符数组转字符串
String replace=str.replace(subStr,newStr);
return replace;
*/
//使用StringBuffer 构造器实现 简易优化
StringBuffer sb=new StringBuffer(subStr);
sb.reverse();
String newStr=sb.toString();
String replace=str.replace(subStr,newStr);
return replace;
}
}