现在的位置: 首页 > 综合 > 正文

Java基础——字符串处理

2018年03月22日 ⁄ 综合 ⁄ 共 8332字 ⁄ 字号 评论关闭

13String

1、字符串是一种特殊的对象

2、字符串一旦初始化就不可以改变

3、String str="abc" str是一种类类型变量, abc是一种对象

4、String str1=new String("abc");字符串最大的特点是一旦被初始化,就不可以被改变

5、String类复写了Object类中的equals方法,该方法用于判断字符串是否相同

练习代码:

package days6;

public class Equals1 

{

public static void main(String []args)

{

String s1="abc";

String s2=new String("abc");

String s3="abc";

System.out.println(s1.equals(s2));//true

System.out.println(s1.equals(s3));//true

System.out.println(s1==s2);//false

System.out.println(s1==s3);//true

}

}

String类是描述字符串事物的,那么它就提供了多个方法对字符串进行控制

1、获取

1)字符串包含的字符数也就是字符串长度。int length()获取长度。

2)根据位置获取位置上的某个字符 char charAt(int index)

3)根据字符获取该字符在字符串中的位置 int indexofint ch)返回的是ch在字符串中第一次出现的位置

Int indexof int ch, int fromIndex)从fronIndex指定位置开始,获取ch在字符串中出现的位置

2、判断

(1)字符串中是否包含某一个字符 boolean contaninsstr

(2)字符串中是否有内容 boolean isEmpty()//原理是判断长度是否为空

(3)字符串是否以指定内容开头 boolean startWithstr);

(4)字符是否以指定内容结尾boolean endWithstr

(5)判断字符串内容是否相同 boolean equalsstr//复写了Object类中的equals方法

(6)判断内容是否相同并忽略大小写boolean equalsIgnore case();

练习代码:

package days6;

public class StringMethod 

{

public static void main(String[]args)

{

String str="abcdef";

   sop(str.length());

   sop(str.charAt(1));

   sop(str.indexOf('a'));

       sop(str.indexOf('a', 3));

    String str1="abc.java";

    sop(str1.startsWith("ab"));

    sop(str1.endsWith("java"));

    sop(str1.contains("bcc"));

    

}

public static void sop(Object obj)

{

System.out.println(obj);

}

}

特殊之处:indexOfstr);可以索引str第一次出现的位置,如果返回-1表示该str不在字符串中出现,所以也可以对指定字符串判断是否包含

例如:ifstr.indexof(“aa”)!=-1)表示有,而且该方法既可以获取出现的位置又可以判断。

转换

(1)将字符数组转换成字符串:

构造函数:Stringchar[ ]) Stringchar[ ]offsetcount)将字符数组中一部分转换成字符串

静态方法:static String copyValueofchar[ ]); static copyValueofchar[ ]data, intoffset,int count)    static String Valueof(char[ ]);

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

3)将字符串转换成字符数组String (byte[ ]),String (byte[ ],offset,count)

4)将字符串转成字节数组byte[]  getBytes():

5) 将基本数据类型转成字符串。static String valueOf(int)static String valueOf(double)

字符串和字符数组在转换过程中是可以指定编码表的

package days6;

public class StringMethod2 

{

public static void main(String[]args)

{

char[]arr={'a','b','c','d','e'};

String s=new String(arr,1,3);

sop("s="+s);

String str="abcdef";

char[]ch=str.toCharArray();

    for(int x=0;x<ch.length;x++)

    {

     sop("ch"+"["+x+"]="+ch[x]);

    }

}

public static void sop(Object obj)

{

System.out.println(obj);

}

}

替换

String replaceold charnew char

切割

String[ ]splitregex

子串:获取子串的一部分

String substring(begin);//从指定位置开始到结尾,如果角标不存在,会出现字符串角标越界            异常

String substringbeginend//包含头不包含尾

package days6;

public class StringMethod3 

{

public static void main(String[]args)

{

method_replace();

method_split();

method_sub();

}

public static void method_replace()

{

String s="hello";

String s1=s.replace('e''a');

sop("s="+s);

sop("s1="+s);

String s2=s.replaceAll("he""hee");

sop("s2="+s2);

}

public static void method_sub()

{

String s="abcdd";

sop(s.substring(1));

sop(s.substring(1, 3));

}

public static void method_split()

{

String s="java,C++,C#";

String[]arr=s.split(",");

for(int x=0;x<arr.length;x++)

{

sop("arr"+"["+x+"]="+arr[x]);

}

}

public static void sop(Object obj)

{

System.out.println(obj);

}

}

转换大小写

String toUppercase(); String toLowerCase();

去除两端多个空格

String trim();

对两个字符串进行自然顺序比较

Int compareTostr);

package days6;

public class StringMethod4 

{

public static void main(String[]args)

{

String s=" Hello java ";

sop(s.toLowerCase());

sop(s.toUpperCase());

sop(s.trim());

sop(s);

String s1="abc";

String s2="def";

sop(s1.compareTo(s2));

}

public  static void sop(Object obj)

{

System.out.println(obj);

}

}

练习代码:

1,模拟一个trim方法,去除字符串两端的空格。

思路:1,判断字符串第一个位置是否是空格,如果是继续向下判断,直到不是空格为止。

结尾处判断空格也是如此。

2,当开始和结尾都判断到不是空格时,就是要获取的字符串。

package days6;

public class StringTest 

{

public static void main(String[]args)

{

String str="  abc  ";

sop(MyTrim(str));

}

public static String MyTrim(String str)

{

int start=0; int end=str.length()-1;

sop(end);

while(start<=end&&str.charAt(start)==' ')

{

start++;

}

while(start<=end&&str.charAt(end)==' ')

{

end--;

}

String str2=str.substring(start, end+1);

return str2;

}

public static void sop(Object obj)

{

System.out.println(obj);

}

}

2,将一个字符串进行反转。将字符串中指定部分进行反转,"abcdefg";abfedcg

思路:

1,曾经学习过对数组的元素进行反转。

2,将字符串变成数组,对数组反转。

3,将反转后的数组变成字符串。

4,只要将或反转的部分的开始和结束位置作为参数传递即可。

package days6;

public class StringTest2 

{

public static void main(String[]args)

{

String str="abcdefg";

sop(str);

sop(reverse(str));

}

public static void sop(Object obj)

{

System.out.println(obj);

}

public static String reverse(String str)

{

char[]ch=str.toCharArray();

swap(ch);

String str2=new String(ch);

return str2;

}

public static void swap(char[]ch)

{

for(int i=0,j=ch.length-1;i<j;i++,j--)

{

char temp=ch[i];

ch[i]=ch[j];

ch[j]=temp;

}

}

}

获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印。

"abcwerthelloyuiodef""cvhellobnm"

思路:

1,将短的那个子串按照长度递减的方式获取到。

2将每获取到的子串去长串中判断是否包含,如果包含,已经找到!。

package days6;

public class StringTest3 

{

public static void main(String[]args)

{

String str1="ade";

String str2="abcde";

sop(MySubstring(str1,str2));

}

public static String MySubstring(String str1,String str2)

{

  String max=(str1.length()>=str2.length())?str1:str2;

  String min=(max==str1)?str2:str1;

  String m = null;

  String n = null;

  for(int i=min.length()-1;i>0;i--)

  {

     m=min.substring(0, i);

if(max.indexOf(m)==0)

{

 n=m; 

break;

}

  }

  return n;

}

public static void sop(Object obj)

{

System.out.println(obj);

}

}

获取一个字符串在另一个字符串中出现的次数“abkkcdkkefkkskk

思路:

1、定义一个计数器

2、获取kk第一次出现的位置

3、当第一次出现位置后剩余的字符串中继续获取kk出现的位置

4、每获取一次,就计数一次

5、当获取不到时,计数完成

package days6;

public class StringTest4 

{

public static void main(String[]args)

{

   String s1="abkkcdkkefkkskk";

   String s2="kk";

   sop("一共出现了"+getCount(s1,s2)+"次");

}

public static void sop(Object obj)

{

System.out.println(obj);

}

public static int getCount(String s1,String s2)

{

String m=null;

int count = 0;

for(int i=0;i<s1.length()-1;i++)

{

m=s1.substring(i);

//sop(m);

if(m.indexOf(s2)==0)

{

sop("s2在s1中出现在第"+i+"号位置");

count++;

}

}

return count;

}

}

14、StringBuffer

概述

1、字符串的组成原理就是通过该类实现的

2、StringBuffer可以对字符串内容进行删改

3、StringBuffer是一个容器

4、很多方法与String相同

5、StringBuffer是可变长度的

StringBuffer是一个容器,而且长度是可变化的,可以直接操作多个数据类型,最终会通过String方法变成字符串

存储

StringBuffer append();//将指定数据作为参数添加到已有数据的结尾处

StringBuffer insertindex,数据)可以将数据插入到指定index位置

package days6;

public class StringBuffer1 

{

public static void main(String []args)

{

StringBuffer  sb = new StringBuffer();

sb.append(39);

sb.insert(1, 99);

sb.append("abc").append(true).append(34);

StringBuffer sb1=sb.append(34);

String s1=new String(sb);

String s2=new String(sb1);

sop(s1);

sop(s2);

}

public static void sop(String sb)

{

System.out.println(sb);

}

}

删除

StringBuffer deletestartend)删除缓冲区中的数据(包含start,不包含end

StringBuffer deletecharATindex)删除指定位置的字符

package days6;

public class StringBuffer2 

{

public static void main(String[]args)

{

delete();

}

public static void sop(String str)

{

System.out.println(str);

}

public static void delete()

{

StringBuffer st=new StringBuffer("abcde");

st.delete(1, 3);

sop(st.toString());

st=new StringBuffer();

sop(st.toString());

;

}

}

获取

char charAt(int index) 

int indexOf(String str) 

int lastIndexOf(String str) 

int length() 

String substring(int start, int end) 

 

修改。

StringBuffer replace(start,end,string);

void setCharAt(int index, char ch) ;

反转。

StringBuffer reverse();

 

将缓冲区中指定数据存储到指定字符数组中。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

package days6;

public class StringBuffer4 

{

public static void main(String[]args)

{

update();

chars();

}

public static void update()

{

StringBuffer st=new StringBuffer("abcda");

st.replace(1, 4, "str");

sop(st.toString());

st.setCharAt(2, 'k');

sop(st.toString());

}

public static void chars()

{

StringBuffer st=new StringBuffer("abcda");

char[] chs=new char[6];

st.getChars(1, 4,chs,1);

for(int x=0;x<chs.length;x++)

{

sop("chs["+x+"]="+chs[x]);

}

}

public static void sop(String str)

{

System.out.println(str);

}

}

15、StringBuilder

Jdk1.5版本之后出现了StringBuilder

StringBuffer:线程同步

StringBuilder:线程不同步

开发建议使用StringBuilder

升级三个因素:

1、提高效率

2、简化书写

3、提高安全性

16、基本数据类型对象包装类

基本数据类型对象包装类。

Byte——Byte

Short——short

Int——Integer

Long——Long

boolean ——Boolean

Float——Float

Double——Double

Char——Character

基本数据类型对象包装类的最常见作用,

就是用于基本数据类型和字符串类型之间做转换

基本数据类型转成字符串。

基本数据类型.toString(基本数据类型值);

如: Integer.toString(34);//34整数变成"34";

字符串转成基本数据类型。

xxx a = Xxx.parseXxx(String);

int a = Integer.parseInt("123");

double b = Double.parseDouble("12.23");

boolean b = Boolean.parseBoolean("true");

Integer i = new Integer("123");

int num = i.intValue();

十进制转成其他进制。

 toBinaryString();

 toHexString();

toOctalString();

其他进制转成十进制。

parseInt(string,radix);

练习代码:

package days6;

public class Inte 

{

public static void main(String[]args)

{

Ints();

}

public static void sop(int m)

{

System.out.println(m);

}

public static void Ints()

{

int m=Integer.parseInt("123");

sop(m);

}

}

抱歉!评论已关闭.