Java中字符串的一些基本操作

案例1;

import java.util.Scanner;

import java.util.Arrays;
public class Test1 {
public static void main(String[] args) {
int i,j;
int m=1;    //记录字符在在字符串中出现的次数
int n=100;  //字符串的最大长度
int a=0,b=0;//a为出现重复次数最多的个数,b为出现重复次数最少的个数
char[] wcf=new char[n];
Scanner scan = new Scanner(System.in);
//字符串初始化
System.out.println("请输入字符串:");
String sz=scan.next();
//统计字符串的字符个数
System.out.println("字符数为:"+sz.length());
//字符串转换为字符数组
char[] szc=sz.toCharArray();
//字符数组排序
Arrays.sort(szc);
//字符数组排序后输出
System.out.print("排序后的字符为:");
System.out.println(szc);
//排序后的数组szc的第一个字符放入到新的字符数组wcf里面
wcf[0]=szc[0];
//记录不重复的字符个数j
for(i=1,j=1;i<szc.length;i++){
if(szc[i]!=szc[i-1]){
wcf[j]=szc[i];
j++;
}
}
int[] cfs=new int[j];//定义数组cfs用以存储字符出现的次数
//存储字符出现的次数
for(i=1,j=1;i<szc.length;i++){
if(szc[i]!=szc[i-1]){
cfs[j-1]=m;   //把字符出现的次数放入数组cfs中
m=1;          //放入上一个字符的次数后m归1
wcf[j]=szc[i]; //把无重复的字符放入wcf数组中
j++;
}
else{
m++;         //记录字符重复的次数
}
}
cfs[j-1]=m;         //把最后一个字符出现的次数放入cfs数组中
//输出排序后无重复的数组
System.out.print("去掉重复的字符后的字符:");
for(int t=0;t<j;t++){
System.out.print(wcf[t]);
}
System.out.println();
//输出不重复的字符数
System.out.println("不重复的字符数:"+j);
int[] cfph=new int[j]; //定义一个新数组
for(i=0;i<j;i++){
cfph[i]=cfs[i];   //把数组cfs的数据全部copy到数组cfph中
}
Arrays.sort(cfph);    //对数组cfph进行排序
//输出出现重复次数最多的个数
System.out.print("最大重复数:");
if(cfph[cfph.length-1]!=1){
a=cfph[cfph.length-1];
}
System.out.println(a);
//输出出现重复次数最少的个数
System.out.print("最小重复数:");
for(int t=0;t<cfph.length;t++){

if(cfph[t]!=1){
b=cfph[t];
break;
}
}
System.out.println(b);
//输出出现重复最少的字符
System.out.print("出现重复最少的字符为:");
for(i=0;i<j;i++){
if(cfs[i]==b){
System.out.print(wcf[i]+" ");
}
}
System.out.println();
//输出出现重复最少的字符的次数
System.out.println("出现重复最少的字符的次数:"+b);
//输出出现重复最多的字符
System.out.print("出现重复最多的字符为:");
for(i=0;i<j;i++){
if(cfs[i]==a){
System.out.print(wcf[i]+" ");
}
}
System.out.println();
//输出出现重复最多的字符的次数
System.out.println("出现重复最多的字符的次数:"+a);
}

}




案例2;

public class MyString {


public static void main(String[] args) {


/*
* 1、String应用
* Java语言中,把字符串作为对象来处理,类String和StringBuffer都可以用来表示一个字符串。(类名都是大写字母打头)
*/

// 字符串1
/*String str1 = "eduask";

// 字符串2
String str2 = new String();

// 字符串3: 参考API文档
String str3 = new String("admin");

char chars1[] = {'a','b','c'}; 
char chars2[] = {'a','b','c','d','e'}; 
String s1 = new String(chars1); 
String s2 = new String(chars2,0,3); */


/*
* 2、StringBuffer表示字符串

* StringBuffer类提供的方法: append():用来在已有字符串末尾添加一个字符串str。
* insert():用来在字符串的索引offset位置处插入字符串str。 
* setCharAt():用来设置指定索引index位置的字符值。
* char charAt(int index) :在当前StringBuffer对象中取索引号为index的字符。第一个字符的索引为“0”
* StringBuffer delete(int start, int end) :删除当前StringBuffer对象中以索引号start开始,到end结束的子串。
* StringBuffer deleteCharAt(int index) :删除当前StringBuffer对象中索引号为index的字符。

* 注意:String中对字符串的操作不是对源操作串对象本身进行的,而是对新生成的一个源操作串对象的拷贝进行的,其操作的结果不影响源串。
* 相反,StringBuffer中对字符串的连接操作是对源串本身进行的,操作之后源串的值发生了变化,变成连接后的串。
*/



/*String question = new String("1+1=");
int answer = 3;
boolean result = (1+1==3);
StringBuffer sb = new StringBuffer();
sb.append(question);
sb.append(answer);
sb.append("\t");
sb.append(result);
System.out.println(sb);*/


   /*String s1 = "STRING类的值是不是会变的->";
   String s2 = s1;
   System.out.println(s2);
   s1+="加个试试"; //String 赋值实际上这个是NEW了一个新的对象了,S1变了
   System.out.println(s2); //S2没有变,这是因为S2指向的地址还是最早的s1所在的地址
 
   StringBuffer b1=new StringBuffer("StringBuffer类的值是会变的->");
   StringBuffer b2=b1;
   b2.append("加个试试");//StringBuffer赋值,操作b2还是那个对象,
   System.out.println(b1);//所以加一个字符进去b1指向的对象的值已经变了哦
*/


   
   /*String str1 = "hello";
   String str2 = "world";
   String str1 = str1 + str2;//这里所做的内部操作,其实不是把str1的内容改变为原str1+str2的内容这么简单, 而把创建一个新的String, 内容为str1 + str2的内容,然后再把str1这个引用重新指向新创建的String, 这就是上面说的String不可变.


   而如果是StringBuffer的话,则直接更改str1的内容,而不是先创建一个新的StringBuffer


   使用 StringBuffer 主要就是在性能上的考虑。


   String 是一种非常常用的数据类型,但由于 String 是不可变对象,在进行 String 的相关操作的时候会产生许多临时的 String 对象。


   而 StringBuffer 在操作上是在一个缓冲中进行的,性能当然优越得多。


   不过,一般做为简单的字符串传递和其它操作,只不要改变字符串内容的操作,用 String 效率会高一些。*/




   //综合应用
   
   StringBuffer buffer=new StringBuffer("wish");
   System.out.println(buffer.toString());
   System.out.println(" 长度:"+buffer.length());
   System.out.println("容量:"+buffer.capacity());
   buffer.setCharAt(0, 'R');//以一个整数和字符为参数,将StringBuffer对象中指定位置的字符替换为参数中的字符
   buffer.append('!');// 将参数转换成字符串,添加到StringBuffer对象的末尾


   buffer.append("Hello,welcome here!");
   buffer.insert(0, "Hello");//在StringBuffer对象的指定位置插入各种类型的值
   System.out.println(buffer.toString());
   System.out.println(" 长度:"+buffer.length());//返回StringBuffer对象的当前字符数目
   System.out.println(" 容量:"+buffer.capacity());//不需另外分配内在的情况下,返回StringBuffer对象可以存储的


   //字符数目
   buffer.delete(0, 3);//从start 到 end
   System.out.println(buffer.toString());
   buffer.deleteCharAt(2);// 删除第几个字符
   buffer.reverse();//颠倒StringBuffer对象中的内容
   System.out.println(buffer.toString());// 打印字符串

}
}




案例3;

public class UseStringTest {     

public static void main(String[] args) {         
new UseStringTest().useString2();
}

public void useString1(){

String text = "hello";          
System.out.println("字串内容: " + text);         
System.out.println("字串长度: " + text.length());         
System.out.println("等于hello? " + text.equals("hello"));         
System.out.println("转为大写: " + text.toUpperCase());         
System.out.println("转为小写: " + text.toLowerCase());  
}

public void useString2(){

String text = "Your left brain has nothing right.\n" + "Your right brain has nothing left.\n";          
System.out.println("字串内容: ");         
for(int i = 0; i < text.length(); i++)             
System.out.print(text.charAt(i));         
System.out.println("\n第一个left: " + text.indexOf("left"));         
System.out.println("最后一个left: " + text.lastIndexOf("left"));          
char[] charArr = text.toCharArray();         
System.out.println("\n字元Array内容: ");         
for(int i = 0; i < charArr.length; i++)             
System.out.print(charArr[i]);
}



案例4;

package com.eduask.Test;

import java.util.Arrays;

public class Teeeee {

public static void main(String[] args) {
int[] number={1,2,3,4,5,6,7};
for(int a:number){
System.out.println(a);
}
 String s = "andq";
 
 char[] sc = s.toCharArray();
 for (char s1 : sc) {
 System.out.println(s1);
 }
 
 char[] sc1 = new char[sc.length+1];
 for (int i=0,j=0;i<sc1.length;i++) {
 if (i==1) {
 sc1[i] = 'e';
 } else {
 sc1[i] = sc[j];
 j++;
 }
 }
 String s1=sc1.toString();
 System.out.println(s1);
 
/* char[] ch = {'q','w','e','r'};
for (char c : ch){
System.out.println(c);
}
String s = String.valueOf(ch);
String s1 = Arrays.toString(ch);
System.out.println(s1);*/
 
/* String s = "andq";
StringBuffer sb = new StringBuffer(s);
sb.setCharAt(1, 'e');
System.out.println(sb);*/
 
StringBuffer sb = new StringBuffer("qnniasdnf");
sb.insert(0, 'a');
System.out.print(sb);  
 
}
}

实验目的: 练习使用Java基本数据类型。使用JavaString类操作字符串和子串。 实验内容: 1.写一个程序提示用户键入某一货币数量(以分为单位),该程序应计算出如何用最少量的1元,50分,10分和1分硬币得到该数目。如195分最少可以用一个1元硬币,1个50分硬币,4个10分硬币和5个1分硬币组成。 注意不要用数组存放不同硬币的值。 2.写一个程序可以对两个字符串进行测试,得知第一个字符串是否包含在第二个字符串中。如字符串”PEN”包含在字符串“INDEPENDENT”中。 可以利用字符串类方法 boolean regionMatches(int toffset, String other, int ooffset, int len) toffset 指从被调用方法的字符串的第几个字符开始测试,如果是0,表明从字符串的首字符开始。other是指使用的另一个字符串。ooffset指从另一个字符串的第几个字符开始。len指要比较几个字符。该方法返回boolean值。 在本题中,ooffset为0,因为我们要测试整个短字符串;len是短字符串的长度;所以应该用 big.regionMatches(index, small, 0, small.length()) 如果big指“independent",small指"pen",则index=2时为假,index=4时为真 (b)改进程序,当第一个字符串包含在第二个字符串中时,显示第一个字符串在第二个字符串中的起始位置。 (c)改进程序,即使当用户输入顺序错误时(第一个是长字符串,第二个是短字符串),能自动在长字符串中搜寻短字符串
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值