字符串是什么意思(wa字符串是什么意思)

  • 生活
  • 2023-04-19 15:38
9.1装箱拆箱封装类

所有的基本类型,都有对应的类类型。比如int对应的类是Integer,这种类就叫做封装类。

packagedigit;publicclassTestNumber{publicstaticvoidmain(String[]args){inti=5;//把一个基本类型的变量,转换为Integer类型Integerit=newInteger(i);//把一个Integer对象,转换为一个基本类型的intinti2=it.intValue();}}Number类

数字封装类有Byte,Short,Integer,Long,Float,Double。这些类都是抽象类Number的子类。

自动装箱与拆箱

不需要调用构造***,通过**=**符号自动把基本类型转换为类类型就叫装箱

不需要调用Integer的intValue***,通过**=就自动转换成int类型**,就叫拆箱

packagedigit;publicclassTestNumber{publicstaticvoidmain(String[]args){inti=5;//基本类型转换成封装类型Integerit=newInteger(i);//自动转换就叫装箱Integerit2=i;//封装类型转换成基本类型inti2=it.intValue();//自动转换就叫拆箱inti3=it;}}int的最大值和最小值

int的最大值可以通过其对应的封装类Integer.MAX_VALUE获取

packagedigit;publicclassTestNumber{publicstaticvoidmain(String[]args){//int的最大值System.out.println(Integer.MAX_VALUE);//int的最小值System.out.println(Integer.MIN_VALUE);}

9.2字符串转换

数字转成字符串

***1:使用String类的静态***valueOf***2:先把基本类型装箱为对象,然后调用对象的toString

packagedigit;publicclassTestNumber{publicstaticvoidmain(String[]args){inti=5;//***1Stringstr=String.valueOf(i);//***2Integerit=i;Stringstr2=it.toString();}}字符串转成数字

调用Integer的静态***parseInt

packagedigit;publicclassTestNumber{publicstaticvoidmain(String[]args){Stringstr="999";inti=Integer.parseInt(str);System.out.println(i);}}练习

把浮点数3.14转换为字符串"3.14"再把字符串“3.14”转换为浮点数3.14

如果字符串是3.1a4,转换为浮点数会得到什么?

publicclassTestNumber{publicstaticvoidmain(String[]args){doublei=3.14;Stringstr=String.valueOf(i);System.out.println("3.14转换成的字符串"+str);doublei2=Float.parseFloat(str);System.out.println(""3.14"转换成的浮点数"+i2);Stringstr2="3.1a4";doublei3=Float.parseFloat(str2);System.out.println(""3.1s4"转换成的浮点数"+i3);}}

9.3数学***

四舍五入,随机数,开方,次方,π,自然常数publicclassTestNumber{publicstaticvoidmain(String[]args){floatf1=5.4f;floatf2=5.5f;//5.4四舍五入即5System.out.println(Math.round(f1));//5.5四舍五入即6System.out.println(Math.round(f2));//得到一个0-1之间的随机浮点数(取不到1)System.out.println(Math.random());//得到一个0-10之间的随机整数(取不到10)System.out.println((int)(Math.random()*10));//开方System.out.println(Math.sqrt(9));//次方(2的4次方)System.out.println(Math.pow(2,4));//πSystem.out.println(Math.PI);//自然常数System.out.println(Math.E);}}练习-数学***publicclassTestNumber{publicstaticvoidmain(String[]args){intn=Integer.MAX_VALUE;doublevalue=Math.pow((1+1/(double)n),n);System.out.println("n取最大整数时value:"+value);doubleerror=Math.abs(Math.E-value);System.out.println("error="+error);}}练习-质数

统计找出一千万以内,一共有多少质数。

质数概念:只能被1和自己整除的数。

publicclassTestNumber{publicstaticbooleanIsZ(inti){for(intj=2;j<=Math.sqrt(i);j++){if(i%j==0){returnfalse;}}returntrue;}publicstaticvoidmain(String[]args){intmax_n=10000000;intcount=0;for(inti=2;i<max_n;i++){if(IsZ(i)){count++;}}System.out.println("一千万以内的质数共有"+count);}}

9.4格式化输出

格式化输出

如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐使用格式化输出,就可以简洁明了。

%s表示字符串%d表示数字%n表示换行

publicclassTestNumber{publicstaticvoidmain(String[]args){Stringname="盖伦";intkill=8;Stringtitle="超神";//直接使用+进行字符串连接,编码感觉会比较繁琐,并且维护性差,易读性差Stringsentence=name+"在进行了连续"+kill+"次击杀后,获得了"+title+"的称号";System.out.println(sentence);//使用格式化输出//%s表示字符串,%d表示数字,%n表示换行StringsentenceFormat="%s在进行了连续%d次击杀后,获得了%s的称号%n";System.out.printf(sentenceFormat,name,kill,title);//使用format格式化输出System.out.format(sentenceFormat,name,kill,title);}}总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达packagedigit;importjava.util.Locale;publicclassTestNumber{publicstaticvoidmain(String[]args){intyear=2020;//总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达//直接打印数字System.out.format("%d%n",year);//总长度是8,默认右对齐System.out.format("%8d%n",year);//总长度是8,左对齐System.out.format("%-8d%n",year);//总长度是8,不够补0System.out.format("%08d%n",year);//千位分隔符System.out.format("%,8d%n",year*10000);//小数点位数System.out.format("%.2f%n",Math.PI);//不同国家的千位分隔符System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);}}

9.5字符char

保存一个字符的时候使用charchar对应的封装类是CharacterCharacter常见***publicclassTestChar{publicstaticvoidmain(String[]args){System.out.println(Character.isLetter('a'));//判断是否为字母System.out.println(Character.isDigit('a'));//判断是否为数字System.out.println(Character.isWhitespace(''));//是否是空白System.out.println(Character.isUpperCase('a'));//是否是大写System.out.println(Character.isLowerCase('a'));//是否是小写System.out.println(Character.toUpperCase('a'));//转换为大写System.out.println(Character.toLowerCase('A'));//转换为小写Stringa='a';//不能够直接把一个字符转换成字符串Stringa2=Character.toString('a');//转换为字符串}}常见转义publicclassTestChar{publicstaticvoidmain(String[]args){System.out.println("使用空格无法达到对齐的效果");System.out.println("abcdef");System.out.println("abdef");System.out.println("adef");System.out.println("使用\t制表符可以达到对齐的效果");System.out.println("abc def");System.out.println("ab def");System.out.println("a def");System.out.println("一个\t制表符长度是8");System.out.println("换行符abc def");System.out.println("单引号abc'def");System.out.println("双引号abc"def");System.out.println("反斜杠abc\def");}}练习-Character

通过Scanner从控制台读取字符串,然后把字符串转换为字符数组。

转换为字符数组后,筛选出控制台读取到的字符串中的大写字母和数字,并打印出来。

publicclassTestNumber{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);Stringstr=sc.next();char[]cs=str.toCharArray();System.out.println(String.valueOf(cs));System.out.println(Arrays.toString(cs));Stringstr2="";for(inti=0;i<str.length();i++){if(Character.isDigit(cs[i])||Character.isUpperCase(cs[i]))str2+=cs[i];}System.out.println(str2);}}

9.6字符串*

创建字符串

字符串即字符的组合,在Java中,字符串是一个类,所以我们见到的字符串都是对象常见创建字符串手段:

每当有一个字面值出现的时候,虚拟机就会创建一个字符串。调用String的构造***创建一个字符串对象。通过+加号进行字符串拼接也会创建新的字符串对象。publicclassTestString{publicstaticvoidmain(String[]args){Stringgaren="盖伦";//字面值,虚拟机碰到字面值就会创建一个字符串对象Stringteemo=newString("提莫");//创建了两个字符串对象char[]cs=newchar[]{'崔','斯','特'};Stringhero=newString(cs);//通过字符数组创建一个字符串对象Stringhero3=garen+teemo;//通过+加号进行字符串拼接}}String被修饰为final,所以是不能被继承的/*这里会报错,因为String不能被继承*/staticclassMyStringextendsString{}immutable-不可改变的

比如创建了一个字符串对象Stringgaren="盖伦";

不可改变的具体含义是指:

不能增加长度不能减少长度不能插入字符不能删除字符不能修改字符

一旦创建好这个字符串,里面的内容永远不能改变,String的表现就像是一个常量。

字符串格式化//%s表示字符串,%d表示数字,%n表示换行StringsentenceFormat="%s在进行了连续%d次击杀后,获得了%s的称号%n";Stringsentence2=String.format(sentenceFormat,name,kill,title);练习1-随机字符串

创建一个长度是5的随机字符串,随机字符有可能是数字,大写字母或者小写字母。

publicclassTestNumber{publiccharget_char(){/*0-9correspondstoAscii48-57*A-Z65-90*a-z97-122**/Randomrandom=newRandom();//随机生成122-48范围类的ascii码intnum;switch(random.nextInt(3)){//获取数字asciicase0:num=random.nextInt(58-48)+48;break;//获取大写字母case1:num=random.nextInt(91-65)+65;break;case2:num=random.nextInt(123-97)+97;break;default:num=48;}charc=(char)num;returnc;}publicStringget_String(intlength){Stringstr="";for(inti=0;i<length;i++){str+=get_char();}returnstr;}publicstaticvoidmain(String[]args){TestNumbert=newTestNumber();Stringstr=t.get_String(5);System.out.println(str);}}练习2-字符串数组排序publicString[]stringDataGroup_sort(String[]strings){/*字符串数组排序按首字母排序**/for(inti=0;i<strings.length-1;i++){for(intj=i+1;j<strings.length;j++){charstr1=strings[i].charAt(0);charstr2=strings[j].charAt(0);intnum1=str1;intnum2=str2;if(num1>num2){Stringstring=strings[i];strings[i]=strings[j];strings[j]=string;}}}returnstrings;}publicstaticvoidmain(String[]args){TestNumbert=newTestNumber();String[]strs=newString[8];for(inti=0;i<8;i++){strs[i]=t.get_String(5);}System.out.println(Arrays.toString(strs));String[]sorted_str=t.stringDataGroup_sort(strs);System.out.println(Arrays.toString(sorted_str));}

//java学习交流:737251827进入可领取学习资源及对十年开发经验大佬提问,免费解答!

练习3-穷举法破解密码生成一个长度是3的随机字符串,把这个字符串作为当做密码使用穷举法生成长度是3个字符串,匹配上述生成的密码

要求:使用递归解决上述问题

9.7操纵字符串

获取字符charAt(intindex)获取指定位置的字符

Stringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";charc=sentence.charAt(0);复制代码

获取对应的字符数组toCharArray()Stringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";char[]cs=sentence.toCharArray();//获取对应的字符数组截取子字符串subStringStringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";//截取从第3个开始的字符串(基0)//到5-1的位置的字符串//左闭右开StringsubString2=sentence.substring(3,5);System.out.println(subString2);split根据分隔符进行分隔Stringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";//根据,进行分割,得到3个子字符串StringsubSentences[]=sentence.split(",");for(Stringsub:subSentences){System.out.println(sub);}trim去掉首位空格Stringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";System.out.println(sentence);//去掉首尾空格System.out.println(sentence.trim());大小写

toLowerCase全部变成小写;toUpperCase全部变成大写。

Stringsentence="Garen";//全部变成小写System.out.println(sentence.toLowerCase());//全部变成大写System.out.println(sentence.toUpperCase());定位

indexOf判断字符或者子字符串出现的位置contains是否包含子字符串

Stringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";System.out.println(sentence.indexOf('8'));//字符第一次出现的位置System.out.println(sentence.indexOf("超神"));//字符串第一次出现的位置System.out.println(sentence.lastIndexOf("了"));//字符串最后出现的位置System.out.println(sentence.indexOf(',',5));//从位置5开始,出现的第一次,的位置System.out.println(sentence.contains("击杀"));//是否包含字符串"击杀"替换

replaceAll替换所有的;replaceFirst只替换第一个。

Stringsentence="盖伦,在进行了连续8次击杀后,获得了超神的称号";Stringtemp=sentence.replaceAll("击杀","被击杀");//替换所有的temp=temp.replaceAll("超神","超鬼");System.out.println(temp);temp=sentence.replaceFirst(",","");//只替换第一个System.out.println(temp);练习1-每个单词的首字母都转换为大写

给出一句英文句子:"lettherebelight"得到一个新的字符串,每个单词的首字母都转换为大写

练习2-英文绕口令

英文绕口令peterpiperpickedapeckofpickledpeppers统计这段绕口令有多少个以p开头的单词

练习3-间隔大写小写模式

把lengendary改成间隔大写小写模式,即LeNgEnDaRy

练习4-最后一个字母变大写

把lengendary最后一个字母变大写

练习5-把最后一个two单词首字母大写

Naturehasgivenusthattwoears,twoeyes,andbutonetongue,totheendthatweshouldhearandseemorethanwespeak把最后一个two单词首字母大写

publicclassStringTest{//问题1-每个单词的首字母都转换为大写publicstaticString[]Split_Space(Stringstr){returnstr.split("");}publicstaticString[]Toupcase(String[]strs){String[]newstrs=newString[strs.length];inti=0;for(Stringstr:strs){char[]cs=str.toCharArray();cs[0]=Character.toUpperCase(cs[0]);newstrs[i++]=String.valueOf(cs);}returnnewstrs;}//练习2-英文绕口令publicstaticintcountp(String[]strs){intcount=0;for(Stringstr:strs){if(str.charAt(0)=='p')count++;}returncount;}//练习3-间隔大写小写模式publicstaticStringupdownChange(Stringstr){Stringupstr=str.toUpperCase();char[]cs=upstr.toCharArray();for(inti=1;i<cs.length;i+=2){cs[i]=Character.toLowerCase(cs[i]);}returnnewString(cs);}//练习4-最后一个字母变大写publicstaticStringlastup(Stringstr){char[]cs=str.toCharArray();cs[cs.length-1]=Character.toUpperCase(cs[cs.length-1]);returnnewString(cs);}//练习5-把最后一个two单词首字母大写publicstaticStringlast2up(Strings){char[]c=s.toCharArray();Stringn="two";c[s.lastIndexOf(n)]=Character.toUpperCase(s.charAt(s.lastIndexOf(n)));returnnewString(c);}publicstaticvoidmain(String[]args){//问题1-每个单词的首字母都转换为大写Stringstr="lettherebelight";String[]newstrs=Toupcase(Split_Space(str));Stringresult="";for(Strings:newstrs){result+=s+"";}System.out.println(result);//练习2-英文绕口令Stringstr2="peterpiperpickedapeckofpickledpeppers";intcount=countp(Split_Space(str2));System.out.println("首字母为p的单词有"+count);//练习3-间隔大写小写模式Stringstr3="lengendary";System.out.println("间隔大小写模式:"+updownChange(str3));//练习4-最后一个字母变大写System.out.println("最后一个字符变成大写:"+lastup(str3));//练习5-把最后一个two单词首字母大写Stringstr5="Naturehasgivenusthattwoears,twoeyes,andbutonetongue,totheendthatweshouldhearandseemorethanwespeak";System.out.println(last2up(str5));}}9.8比较字符串是否是同一个对象

str1和str2的内容一定是一样的!但是,并不是同一个字符串对象。

==用于判断是否是同一个字符串对象。

是否是同一个对象-特例Stringstr1="thelight";Stringstr3="thelight";System.out.println(str1==str3);

一般说来,编译器每碰到一个字符串的字面值,就会创建一个新的对象。所以在第6行会创建了一个新的字符串"thelight";但是在第7行,编译器发现已经存在现成的"thelight",那么就直接拿来使用,而没有进行重复创建。

内容是否相同

使用equals进行字符串内容的比较,必须大小写一致;equalsIgnoreCase,忽略大小写判断内容是否一致。

是否以子字符串开始或者结束

startsWith//以...开始;endsWith//以...结束。

练习-比较字符串

创建一个长度是100的字符串数组,使用长度是2的随机字符填充该字符串数组。统计这个字符串数组里重复的字符串有多少种

学了hash再来做吧..

9.9StringBuffer*

StringBuffer是可变长的字符串

追加删除插入反转

append追加;delete删除;insert插入;reverse反转.

packagecharacter;publicclassTestString{publicstaticvoidmain(String[]args){Stringstr1="letthere";StringBuffer***=newStringBuffer(str1);//根据str1创建一个StringBuffer对象***.append("belight");//在最后追加System.out.println(***);***.delete(4,10);//删除4-10之间的字符System.out.println(***);***.insert(4,"there");//在4这个位置插入thereSystem.out.println(***);***.reverse();//反转System.out.println(***);}}长度容量

为什么StringBuffer可以变长?和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。但是,这个字符数组,留有冗余长度。

比如说newStringBuffer("the"),其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了。如果追加的长度超过了19,就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去数组长度就变长了。

length:“the”的长度3;capacity:分配的总空间19。

publicclassTestString{publicstaticvoidmain(String[]args){Stringstr1="the";StringBuffer***=newStringBuffer(str1);System.out.println(***.length());//内容长度System.out.println(***.capacity());//总空间}}练习-StringBuffer性能

String与StringBuffer的性能区别?

生成10位长度的随机字符串然后,先使用String的+,连接10000个随机字符串,计算消耗的时间然后,再使用StringBuffer连接10000个随机字符串,计算消耗的时间

提示:使用System.currentTimeMillis()获取当前时间(毫秒)

publicstaticvoidmain(String[]args){longstart=System.currentTimeMillis();Strings1="";for(inti=0;i<10000;i++){s1+='a';}longend=System.currentTimeMillis();System.out.println("string总共耗时了:"+(end-start));longstart2=System.currentTimeMillis();StringBuffer***=newStringBuffer();for(inti=0;i<10000;i++){***.append('a');}longend2=System.currentTimeMillis();System.out.println("stringbuffer总共耗时了:"+(end2-start2));}

//java学习交流:737251827进入可领取学习资源及对十年开发经验大佬提问,免费解答!

练习-MyStringBuffer

根据接口IStringBuffer,自己做一个MyStringBuffer

IStringBuffer.java

packagecharacter;publicinterfaceIStringBuffer{publicvoidappend(Stringstr);//追加字符串publicvoidappend(charc);//追加字符publicvoidinsert(intpos,charb);//指定位置插入字符publicvoidinsert(intpos,Stringb);//指定位置插入字符串publicvoiddelete(intstart);//从开始位置删除剩下的publicvoiddelete(intstart,intend);//从开始位置删除结束位置-1publicvoidreverse();//反转publicintlength();//返回长度}

MyStringBuffer.java

packagecharacter;publicclassMyStringBufferimplementsIStringBuffer{}

9.10MyStringBuffer

具体文字说明:how2j.cn/k/number-st…

packagedigit;publicclassMyStringBufferimplementsIStringBuffer{intcapacity=19;intlength=0;char[]value;//无参构造***publicMyStringBuffer(){value=newchar[capacity];}//带参数构造***publicMyStringBuffer(Stringstr){this();if(null==str)return;if(capacity<str.length()){capacity=value.length*2;value=newchar[capacity];}if(capacity>=str.length()){System.arraycopy(str.toCharArray(),0,value,0,str.length());}length=str.length();}//追加字符串@Overridepublicvoidappend(Stringstr){insert(length,str);}//追加字符@Overridepublicvoidappend(charc){append(String.valueOf(c));}//指定位置插入字符@Overridepublicvoidinsert(intpos,charb){insert(pos,String.valueOf(b));}//指定位置插入字符串@Overridepublicvoidinsert(intpos,Stringb){//边界条件判断if(pos<0)return;if(pos>length)return;if(null==b)return;//扩容while(length+b.length()>capacity){capacity=(int)((length+b.length())*2);char[]new_value=newchar[capacity];System.arraycopy(value,0,new_value,0,length);value=new_value;}char[]cs=b.toCharArray();//先把已经存在的数据往后移System.arraycopy(value,pos,value,pos+cs.length,length-pos);//把要插入的数据插入到指定位置System.arraycopy(cs,0,value,pos,cs.length);length=length+cs.length;}//从开始位置删除剩下的@Overridepublicvoiddelete(intstart){delete(start,length);}//从开始位置删除结束位置-1@Overridepublicvoiddelete(intstart,intend){//边界条件判断if(start<0)return;if(start>length)return;if(end<0)return;if(end>length)return;if(start>=end)return;System.arraycopy(value,end,value,start,length-end);length-=end-start;}//反转@Overridepublicvoidreverse(){for(inti=0;i<length/2;i++){chartemp=value[i];value[i]=value[length-i-1];value[length-i-1]=temp;}}//返回长度@Overridepublicintlength(){returnlength;}publicStringtoString(){char[]realValue=newchar[length];System.arraycopy(value,0,realValue,0,length);returnnewString(realValue);}publicstaticvoidmain(String[]args){MyStringBuffer***=newMyStringBuffer("therelight");System.out.println(***);***.insert(0,"let");System.out.println(***);***.insert(10,"be");System.out.println(***);***.insert(0,"GodSay:");System.out.println(***);***.append("!");System.out.println(***);***.append('?');System.out.println(***);***.reverse();System.out.println(***);***.reverse();System.out.println(***);***.delete(0,4);System.out.println(***);***.delete(4);System.out.println(***);}}

猜你喜欢