Java基础第十三天学习日记_String字符串

------- android培训java培训、期待与您交流! ----------

String类:字符串是一个特殊的对象。

字符串对象最大特点:字符串一旦初始化就不可以被改变。

String s1= "abc";// s1是一个类类型变量,“abc”是一个对象。在其内存中有一个对象。

String s2= new String ("abc");//在其内存中有两个对象。

String s3= "abc";

s1.equals(s2);结果为true。因为String类复写打了Object类中equals方法,该方法用于判断字符串是否相同。

s1==s3;结果为true。因为当定义字符串常量时,虚拟机会查看常量池,发现其中有相同的字符串对象时,便不会再开辟空间了。

String类提供的对字符串的操作方法有:

1、获取

1.1 字符串中的包含字符数,也就是字符串的长度。

int length():获取长度。

1.2根据位置获取位置上某个字符。

char charAt(int  index);

1.3 根据字符获取该字符在字符串中位置。(如果没有找到字符或字符串,返回-1)

int indexof(char ch):返回的是ch在字符串中第一次出现的位置。

int indexof (char ch , int fromIndex) : 从fromIndex指定位置开始,获取ch在字符穿中出现的位置。

int indexof(string str):返回的是str在字符串中第一次出现的位置。

int indexof (string str , int fromIndex) : 从fromIndex指定位置开始,获取str在字符穿中出现的位置。

int lastIndexOf("a"):这时,字符串会从最后一个字符向前查找,但是索引不变,一样是从前面开始计算。

2、判断。

2.1 字符串中是否包含某一个子串。

boolean contains(str) : 特殊之处,indexOf(str):可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在,if( str.indexof("aa")!=-1),而且该方法既可以判断,又可以获取出现的位置。

2.2 字符中是否有内容。

boolean isEmpty ():原理就是判断长度是否为0.

2.3 字符串是否是以指定内容开头。

boolean startsWith ( str ) ;

2.4 字符串是否是以指定内容结尾。

Boolean endsWith ( str );

2.5 判断字符串内容是否相同。复写了Object类中的equals方法。

boolean equals ( str );

2.6 判断内容是否相同,并忽略大小写。

boolean equalsIgnoreCase ( );

3、转换

3.1 将字符数组转成字符串。

构造函数:String (char[]);

  String ( char [] , offset , count ) : 将字符数组中的一部分转成字符串。offset起始位置,count个数。

静态方法:static String copyValueOf ( char [] );

  static String copyValueOf ( char [] data , int offset , int count )

  static String valueOf ( char [] );

3.2 将字符串转成字符数组。

char [] toCharArray( );

3.3 将字节数组转成字符串。

String ( byte[ ] )

String ( byte[ ] , offset , count ) :将字节数组中的一部分转成字符串。

3.4 将字符串转成字节数组。

byte[] getBytes ( );

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

static String valueOf (int)

static String valueOf (double)

特殊: 字符串和字节数组在转换过程中,是可以指定编码表的。

4、替换

String replace ( oldchar , newchar )//可以替换字符串。如果要替换的字符或字符串不存在,返回原串。

5、切割。

String[] split ( regex );//传入的参数是切割的分隔字符或字符串。返回值是字符串数组。

6、子串。获取字符串的一部分。

String substring ( begin );//从指定位置开始到结尾。

String substring ( begin ,end );//包含头不包含尾。

7、转换,去除空格,比较

7.1 将字符串转成大写或小写。

String toUpperCase ( );

String toLowerCase ( );

7.2 将字符串两端的多个空格去除。

String trim ( );

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

int compareTo ( string );

public class StringTest1 
{
	/**
	 * 自定义方法实现去除字符串两端空格。
	 */
	public static void main(String[] args)
	{
		String str="   abcdefg  ";
		String str1=myTrim(str);
		System.out.println(str1);
		String str2=str.trim();
		System.out.println(str2);
	}
	public static String myTrim(String str)
	{
		int start=0,end=str.length()-1;
		while(start<=end&&str.charAt(start)==' ')
			start++;
		while(start<=end&&str.charAt(end)==' ')
			end--;
		return str.substring(start,end+1);//返回的子串是包含头不包含尾的。
	}
}
public class StringTest2 {

	/**
	 * 将字符串反转,
	 * 思路:
	 * (1)先将字符串转换为字符数组
	 * (2)再将字符数组反转
	 * (3)将字符数组变成字符串
	 */
	public static void main(String[] args)
	{
		String str="abcdefg";
		String str1=reverseString(str);
		System.out.println(str1);
	}
	public static String reverseString(String str)
	{
		char[] arr=str.toCharArray();
		reverse(arr);
		return new String(arr);
	}
	public static void reverse(char[] arr)
	{
		for(int start=0,end=arr.length-1;start<end;start++,end--)
		{
			swap(arr,start,end);
		}
	}
	public static void swap(char[] arr,int start,int end)
	{
		char temp=arr[start];
		arr[start]=arr[end];
		arr[end]=temp;
	}
}
public class StringTest3 
{
	/**
	 * 获取一个字符串在另一个字符串中出现的次数
	 * 思路:
	 * (1)定义一个计数器
	 * (2)获取子串在父串中出现的位置
	 * (3)从第一次出现的位置后剩余的字符串中继续获取子串第一次出现的位置,每获取一次就计数一次。
	 * (4)当获取不到时,计数完成。
	 */
	public static void main(String[] args) 
	{
		String str="abcdkkefgkk";
		String sub="kk";
		int count=getSubCount2(str, sub);
		System.out.println(count);
	}
	public static int getSubCount(String str,String sub)
	{
		int count=0;
		int index=0;
		while((index=str.indexOf(sub))!=-1)//注意加括号。
		{
			str=str.substring(index+sub.length());
			count++;
		}
		return count;
	} 
	public static int getSubCount2(String str,String sub)
	{
		int count=0;
		int index=0;
		while((index=str.indexOf(sub,index))!=-1)//注意加括号。
		{
			index=index+sub.length();
			count++;
		}
		return count;
	}
}
public class StringTest4 {
	/**
	 * 获取两个字符串中的最大相同字符串
	 * 思路:
	 * (1)将短的那个子串按长度递减的方式获取到。
	 * (2)将获取到的子串去长串中判断是否包含。如果包含,则找到,
	 */
	public static void main(String[] args) 
	{
		String str1="abcdhelloefg";
		String str2="kkkhellobbb";
		String temp=getMaxString(str1, str2);
		System.out.println(temp);
	}
	public static String getMaxString(String str1,String str2)
	{
		String max="",min="";
		max=(str1.length()>str2.length())?str1:str2;
		min=(max==str1)?str2:str1;
		for(int x=0;x<min.length();x++)
		{
			for(int y=0,z=min.length()-x;z<min.length();y++,z++)
			{
				String temp=min.substring(y,z);
				if(max.contains(temp))
					return temp;
			}
		}
		return "";
	}
}

----------------------------------------------------------------------------------

StringBuffer:字符串缓冲区。

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

  l StringBuffer可以对字符串内存进行增删。

  l StringBuffer是一个容器。

  l 很多方法与String相同。

  l StringBuffer是可变长度的。

  l 可以操作多个数据类型。

  l 最终会通过toString方法变成字符串。

基本操作:

1、存储

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

StringBuffer insert ( index ,数据 ):可以将数据插入到指定index位置。

2、删除

StringBuffer delete ( start , end ):删除缓冲区中的数据,包括start,不包含end。

StringBuffer deleteCharAt ( index ):删除指定位置的字符。

3、获取。

char charAt ( int index )

int indexOf (String str)

int lastIndexOf ( String str)

int length ( )

String substring ( int start , int end )

4、修改。

StringBuffer replace ( start ,end ,string );

void setCharAt ( int index , char ch );

5、反转。

StringBuffer reverse ( ) ;

6、将缓冲去中指定数据存储到指定字符数组中。

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

将缓冲去中的从begin到end,不包括end 的数据转存到dst字符数组中,从索引dst Begin开始。

public class StringBufferDemo {

	/**
	 * StringBuffer方法演示
	 */
	public static void main(String[] args) 
	{
		StringBuffer sb=new StringBuffer();
		sb.append("abc").append(true).append(34);//可以不断的更新数据,最后使用的时候将其变成字符串就可以了。
		//sb.delete(1, 4);删除1,到4的字符。包含头不包含尾。
		//sb.deleteCharAt(1);//删除指定位置的字符
		//sb.delete(0, sb.length());//清空缓冲区。
		//sb.replace(1, 4, "t");//将指定范围内的字符串替换为指定字符串。
		//sb.setCharAt(1, 'c');//将指定索引上的字符替换为指定字符。只能为字符。
		//sb.reverse();//将字符串反转。
		char[] ch=new char[4];
		sb.getChars(1, 6, ch, 0);
		for(int x=0;x<ch.length;x++)
		{
			System.out.println(ch[x]);
		}
		//sb.toString();
		//System.out.println(sb);
	}
}

JDK1.5版本之后出现了StringBuilder。

StringBuilder的方法与的方法几乎完全相同。

StringBuilder是线程不同步。所以它更加效率,但是当有多线程时应该使用buffer。

StringBuffer是线程同步。

以后开发,建议使用StringBuilder。

JDK升级的三个因素是:

1、提高效率

2、简化书写

3、提高安全性。

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

基本数据类型            对象包装类

byte                     Byte

short  Short

int     Integer

long    Long

boolean                  Boolean

float     Float

double Double

char      Character

基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。

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

1、基本数据类型+" "

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

如:Integer.toString ( 34 );//将34整数变成“34”

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

1、xxx a = Xxx.parseXxx(String);

2、int a = Interger.parseInt ( "123" );

3、double b = Double.parseDouble ( "12.36" );

4、boolean c = Boolean.parseBoolean ( "true");

十进制转成其他进制。

toBinaryString ( );

toHexString ( );

toOctalString ( );

其他进制转成十进制。

parseInt ( string,radix);

String:代表要转化为10进制的数。

Radix:表示被转化的进制。

Integer a = 127.

Integer b = 127.

a == b结果为true。因为a和b执行了同一个Integer对象。因为当数值在byte范围内容,对于新特性,如果该数值已经存在,则不会再开辟新的空间。

------- android培训java培训、期待与您交流! ----------  详细请查看: http://edu.csdn.net/heima/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值