黑马程序员——String类及其常见操作

来源:互联网 发布:企业文档数据加密 编辑:程序博客网 时间:2024/06/04 19:30

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、什么是String类

String的英文释义为字符串,顾名思义,是指数字、字母以及其他各类符号的随机组合序列。在java语言里,String类作为一个类类型变量而存在,封装着计算机处理字符组合的各种常见方法。


二、String类的特性

String的类对象位于内存结构的常量池中,一旦初始化就不能被改变。

public class demo {public static void main(String[] args){//创建字符串对象abc,并将其赋给变量sString s ="abc";  //将字符串abc的a替换为d,并赋给变量s1String s1=s.replace('a', 'd');System.out.println(s); //打印s结果为abcSystem.out.println(s1);//打印s1结果为dbc}}

如上述代码,s指向的字符串abc在执行完替换操作后,打印s结果仍为abc,证明字符串abc执行完替换操作后生成了一个新的字符串对象dbc,原对象保持不变。

三、String的常见操作方法

1 获取

int length():该方法可以获取字符串的长度,要与数组的length区分开来,数组的length是属性没有括号。

char charAt(int index):该方法可以根据位置获取该位置上的字符

int indexOf(int ch):该方法可以根据字符获取字符第一次出现的位置,int ch是指字符的ASCII码值

int indexOf(int ch,fromIndex):从指定位置开始寻找,获取字符第一次出现的位置

int indexOf(String str):该方法用于获取某一子串第一次出现的位置

int indexOf(String str,fromIndex):从指定位置开始寻找,获取某一子串第一次出现的位置

int lastIndexOf():该方法用于从最后一位开始寻找字符出现的位置,其重载方法与上同不再赘述

2 判断

boolean isEmpty() :用于判断字符串是否为空

boolean startsWith(String str) :用于判断字符串是否以某个词组开头

boolean endsWith(String str) :用于判断字符串是否以某个词组结尾

boolean equals(String str) :复写了object类的equals方法,不再比较对象的地址值,用于比较两个字符串的内容是否相同

boolean equalsIgnoreCase(String str) :与上同,但比较内容的时候忽略大小写

3 转换

   3.1字符数组与字符串的互相转换

String(char[] arr):将字符数组转换为字符串,通过String的构造函数完成,示例如下。

class Demo{public static void main(String[] args){char[] arr ={'a','b','c','d','e'};//构造字符串对象的时候直接接收了arr数组,并将其元素转换为字符串String str =new String(arr);System.out.println(str);//打印结果为abcde//接收arr数组,并从第二个角标位开始,将3个长度的元素变为字符串String str2 =new String(arr,2,3);System.out.println(str2);//打印结果为cde}}
String(char[] arr,int offset,int count):将字符数组的某一部分转换为字符串,通过String的有参构造函数完成,示例如上。

static String copyValueOf(char[] arr):复制某一字符数组中所有元素的值并生成字符串

static String copyValueOf(char[] arr,int offset,int count):复制某一字符数组中指定元素的值并生成字符串

static String ValueOf(Char[] arr):接收某一字符数组中所有元素的值并生成字符串

char[] toCharArray():将字符串转换为字符数组

3.2数组与字符串的互相转换    

String(byte[] arr):

String(byte[] arr,int offset,int count):

byte[]  getBytes():

............

与字符数组的转换相似,不再赘述。特殊之处:字节数组与字符串互相转换时,可以指定编码表

3.3将基本数据类型转换为字符串

String ValueOf(int)

                String ValueOf(boolean)

String ValueOf(double)

...........

4 替换

String replace(char oldChar,char newChar):将原字符oldChar替换为新字符newChar,需要注意,替换后内存中会生成一个新的字符串

5 切割

String[] split(" "):用字符或字符串对原字符串进行切割,生成一个字符串数组。特别注意,返回的是字符串数组而不是字符串!

String[] split(regex):按照正则表达式指定的规则对原字符串进行切割,生成一个字符串数组。特别注意,返回的是字符串数组而不是字符串!

6 子串

String substring(int begin):从指定位置begin开始,到原字符串结尾位置,截取生成一个新的字符串

String substring(int begin,int end):从指定位置begin开始,到指定位置end为止,截取生成一个新的字符串,需要注意:包含头不包含尾!

7 其他常用

7.1大小写转换

String toUpperCase();

String toLowerCase();

7.2 去除空格

String trim();

7.3 与另一个字符串进行自然顺序的比较

int compareTo(String str):如果返回值是0表示自然顺序相同,如果是负数表示this的自然顺序在前面,如果是正数表示this的自然顺序在后面

四、三个常见的字符串编程场景

1.去除字符串两端的空格

class demo {public static void main(String[] args){String s ="---abcdef-----";System.out.println(s);String s1 =myTrim(s);System.out.println(s1);}//封装一个用于去除字符串两端空格的方法myTrim()public static String myTrim(String str){int begin =0;int end   =str.length()-1;char ch   =str.charAt(begin);while(begin<=end&&ch=='-')//当begin所代表的位置不为'-'时循环结束begin++;while(begin<=end&&end=='-')//当end所代表的位置不为'-'时循环结束end--;return str.substring(begin,end+1);//利用String的substring方法得到需求字符串}}

2.统计一个字符串在另一个字符串中出现的次数

/* *需求:统计"kk"在"abckkdefgkkhijkklmnkkop"出现的次数 *思路: *1.定义一个计数器,每找到一个"kk"就记录一次 *2.利用String的indexOf(String str,int fromIndex)寻找"kk" *3.发现寻找"kk"的过程是一个循环过程 *4.敲写代码 */package com.itheima;public class Demo {public static void main(String[] args){String str = "abckkdefgkkhijkklmnkkop";//定义一个大字符串String str2= "kk";//定义一个小字符串int count  = getSubCount(str,str2);//调用getSubCount方法System.out.println("kk出现的次数为:"+count);}//定义一个getSubCount方法,用于返回小字符串在大字符串中出现的次数public static int getSubCount(String str,String key){int count  =0;int index  =0;while(str.indexOf(key, index)!=-1){ //循环判断大字符串中是否还有小字符串index =str.indexOf(key,index)+key.length();//改变搜索的起始位置count++;}return count;}}


3.判断两个字符串的最大相同部分

/* *需求:判断两个字符串"abcdefhihellojavajava"和"dcbahellop"的最大相同部分 *思路: *1.对短串进行逐一减位,判断是否包含在长串中 *2.短串每减一位,都有好多种子串情况,想到嵌套for循环 *3.开始敲代码 */package com.itheima;public class Demo {public static void main(String[] args){String str  = "abcdefhihellojavajava";String str2 = "dcbahellop";System.out.println(getMaxSub(str,str2));}public static String getMaxSub(String s1,String s2){//对传进来的两个字符串进行长短串判别String shor =(s1.length()<=s2.length())?s1:s2;String lon  =(s1==shor)?s2:s1;//双重for循环遍历出最大相同子串for(int x=0;x<shor.length();x++){for(int y=0,z=shor.length()-x;z!=shor.length()+1;y++,z++){if(lon.contains(shor.substring(y,z)));return shor.substring(y,z);}}//遍历完如果没有返回值则返回没有交集return "没有交集";}}


4.反转字符串

/* *需求:反转字符串"abcdefghi" *思路: *1.将字符串转换为char[] *2.对数组进行反转 *3.将反转后的数组变为字符串 */package com.itheima;public class Demo {public static void main(String[] args){String str = "abcdefghi";char[] arr = str.toCharArray();String str2=new String(reverse(arr));System.out.println(str2);}//定义一个数组反转的方法reversepublic static char[] reverse(char[] arr){for(int x=0,y=arr.length-1;x<y;x++,y--){ //按照0角标递增1同时尾角标递减1的规则遍历数组swap(arr[x],arr[y]);              //让两个角标所代表的字符交换位置}return arr;}//定义一个字符交换位置的方法swappublic static void swap(char x,char y){char temp = x;x         = y;y         = temp;}}


0 0
原创粉丝点击