Java的常用类String 05

  

一、String类的特点:

字符串对象一旦被初始化就不会被改变

例如:

public class StringDemo{

       public static void main(String[] args){

             String s = "abc";

              s = "nba";

            System.out.println("s = " + s);

      }

}


重点:

1.引用的s放在栈中
2.字符串常量放在常量池(字符串常量池)中,第一次创建放入池中,第二次使用直接把引用指向池中已有的数据。

3.newString("xxx")创建的 数据放在堆中,每次new都会在堆中创建一块内存存放数据。

4. String类复写了Object中的equals方法,建立了String类自己的判断字符串对象是否相同的依据。只比较字符串内容,不比较地址。


二、常用构造方法摘要

1.String()
 
初始化一个新创建的 String 对象,它表示一个空字符序列。


2.String(byte[] bytes) 
 使用平台的默认字符集解码指定的bety数组,构造一个新的 String。


3. String(byte[] bytes,int offset, int length)
 
通过使用平台的默认字符集解码指定的 byte 子数组,构造一个新的String。新 String 的长度是字符集的函数,因此可能不等于该子数组的长度。

bytes - 要解码为字符的 byte

offset - 要解码的第一个 byte 的索引

length - 要解码的 byte 数


4.String(char[] value)
 
分配一个新的 String,它表示当前字符数组参数中包含的字符序列。


5.String(String original)
  初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。


三、String类部分方法

1、获取:

a.

获取字符串中字符的个数(长度)

int length();

b.

根据位置获取字符

    char charAt(int index);

c.

根据字符获取在字符串中的位置

     int indexOf(int ch);

    indexO方法参数f类型为int是为了既可以支持字符,也可以支持字符在ASCII码中对应的数字。

d.

从指定位置开始查找ch第一次出现的位置。

     int indexOf(int ch,int fromIndex);

    int indexOf(String str);

     int indexOf(String str,int fromIndex);

  根据字符串获取在字符串中第一次出现的位置(从后开始找)。

    int lastIndexOf(int ch);

    int lastIndexOf(int ch,int fromIndex);

     int lastIndexOf(String str);

    int lastIndexOf(String str,int fromIndex);

   P.S: 可以根据-1,来判断该字符或者字符串是否存在。

e.

获取字符串中的一部分字符串,也叫子串。

   String substring(int beginIndex,intendIndex);

    String substring(int beginIndex);

例如:

public class StringMethodDemo{
       public static void main(String[] args){
            StringMethodDemo();
      }

       public static void StringMethodDemo(){
            String s = "abcdae";
            System.out.println( "substring:" + s.substring(2));
            System.out.println( "substring:" + s.substring(2,4));
      }
}

2、转换:

a.

将字符串变成字符串数组(字符串的切割)

    String[] split(String regex);涉及到正则表达式。

b.

将字符串变成字符数组

           char[] toCharArray();

将字符串变成字节数组

     char[] getBytes();

c.

将字符串中的字母转成大小写

    String toUpperCase();大写

    String toLowerCase();小写

d.

将字符串中的内容进行替换

     String replace(char oldCh,char newCh);

     String replace(String s1,String s2);

 P.S: replace方法如果没有找到要替换的内容,则返回的还是原字符串。

e.

去除字符串两端空格

    String trim();


3、判断:

a.

两个字符串内容是否相同呢?

    boolean equals(Object obj);

    boolean equalsIgnoreCase(String str);忽略大小写比较字符串内容。

b.

字符串中是否包含指定字符串

     boolean contains(String str);

c.

字符串是否以指定字符串开头,是否以指定字符串结尾

     boolean startsWith(String str);

     boolean endsWith(String str);

d.

    int compareTo(String str);  

如果参数字符串等于此字符串,则返回值0;如果此字符串按字典顺序小于字符串参数,则返回一个小于0 的值;如果此字符串按字典顺序大于字符串参数,则返回一个大于0的值。


3、返回字符串对象的规范化表示形式

  String intern();

    当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此String对象的引用。


四、练习:

例1:

/*
2,将一个字符串进行反转,将字符串中指定部分进行反转,"abcdefg";
	思路:
		1,曾经学过的对数组的元素进行反转。
		2.将字符串变成数组,对数组反转。
		3,将反转后的数组变成字符串。
		4,只要将反转的部分的开始和结束位置作为参数传递即可,
*/

class  StringTest2
{
	public static void sop(String str)
	{
		System.out.println(str);
	}
	public static void main(String[] args) 
	{
		String s = "0123456";
		sop("("+s+")");
		sop("("+reverseString(s)+")");

	}
	
	private static void reverse(char[] arr,int x,int y)
	{
		for (int start = x,end = y-1; start<end; start++,end--)
		{
			swap(arr,start,end);
		}
	}
	private static void swap(char[] arr,int x,int y)
	{
		char temp = arr[x];
		arr[x] = arr[y];
		arr[y] = temp;
	}
	
	public static String reverseString(String s,int start,int end)
	{
		//字符串变数组
		char[] chs = s.toCharArray();

		//反转数组
		reverse(chs,start,end);

		//将数组变成字符串。
		return new String(chs);
	}<pre name="code" class="java">}

	

例2:

/*
3,获取一个字符串在另一个字符串中出现的次数。
	“abkkdsfgadkksdkk”
	思路:
	1,定义一个计数器
	2,获取kk第一次出现的位置。
	3,从第一次出现位置后剩余的字符串中继续获取kk出现的位置
		每获取一次就计数一次。
	4,当获取不到时,计数完成。
*/


class  StringTest3
{
	public static void sop(String str)
	{
		System.out.println(str);
	}
	public static void main(String[] args) 
	{
		String s = "abkkdsfgadkksdkk";
		sop("count="+getSubCount_2(s,"kk"));

	}
	public static int getSubCount(String str,String key) 
	{
		int count = 0;
		int index = 0;

		while ((index = str.indexOf(key))!=-1)
		{
			sop("str="+str);
			str = str.substring(index+key.length());

			count++	;

		}
		return count;

	}
	public static int getSubCount_2(String str,String key) 
	{
		int count = 0;
		int index = 0;

		while ((index = str.indexOf(key,index))!=-1)
		{
			sop("index="+index);
			index = index + key.length(); 

			count++	;

		}
		return count;

	}
}



例3:

/*
4,获取两个字符串中最大相同字串,第一个动作:将短的那个串进行长度依次递减的字串打印,
	"dasfasdahelloded"
	"hkvmdhellodgf"
	思路:
		1,将短的那个字串按照长度递减的方式获取到。
		2,将每获取到的字串去长串中判断是否包含。
			如果包含,已经找到!
*/

class  StringTest4
{
	public static void sop(String str)
	{
		System.out.println(str);
	}
	public static void main(String[] args) 
	{
		String s1 = "dasfasdahelloed";
		String s2 = "hkvmdhellogf";
		sop(getMaxSubString(s1,s2));

	}

	public static String getMaxSubString(String s1,String s2)
	{
		String max = "",min = "";

		max = (s1.length()>s2.length())?s1:s2;

		min = (max==s1)?s2:s1;
		sop("max="+max+".....min="+min);
		for (int x = 0; x<min.length(); x++)
		{
			for (int y = 0,z = min.length()-x; z!=min.length()+1; y++,z++)
			{
				String temp = min.substring(y,z);

				//sop(temp);
				if (max.contains(temp))
				{
					return temp;
				}
			}
		}

		return "";
	}
}




阅读更多
个人分类: IT
上一篇Java文如何制作帮助文档4
下一篇Java单例设计模式06
想对作者说点什么? 我来说一句

JAVA常用类总结

2017年12月22日 13.87MB 下载

String类简介

2012年04月05日 804B 下载

字符串1305

2016年05月11日 52.44MB 下载

java运行常用类rt.jar下载

2018年04月10日 12.46MB 下载

Java常用类.ppt

2011年09月25日 181KB 下载

java课件 常用类与异常处理

2010年12月15日 716KB 下载

rt.jar jar包

2018年04月15日 11.85MB 下载

比较全的java工具类

2017年09月26日 5.01MB 下载

java的1000个常用类

2015年05月23日 62KB 下载

没有更多推荐了,返回首页

关闭
关闭