Java中的String类

1. String

1.1. String类的特点

第二天学习Java语法的时候,学习了Java中的常量:

数字(整数和小数)、字符(需要使用单引号引用)、字符串(双引号引用)、布尔truefalsenull

数字、字符、布尔数据都属于Java中的基本数据类型。

而字符串它属于Java中提供的引用类型(类型)Java要表示一个字符串,需要使用一个类来描述。

Java这门语言,它会把我们身边的任何事物,以及可能现实生活中根本就没有东西都能抽象成一个类,然后使用这个类描述这个事物。我们可以在Java中使用这个类,以及它中的行为(功能

字符串它也属于一类事物,用来表示某些数据信息,而Java也提供了一个类对字符串这类数据进行了描述。

Java中使用String这个类,表示生活中存在的所有字符串这类事物。

 

如果我们在java 程序需要操作字符串数据,第一印象应该是来找String这个类。

 

查阅api中描述的String类,知道他的父类是Object,同时看到String类是被final修饰的,String类是一个最终的类,不能被继承。

Java程序中只要使用双引号书写的所有字符串数据都是String这个类的一个实例对象。

String s = “abc”; 这里书写的abc字符串它就是一个String类型的对象。

在程序中只要我们书写了字符串数据,这些数据就是String的一个实例对象,但是这个对象称为常量,它保存的位置是方法区的字符串常量池中。

 

1.2. String类构造函数

String对象它本身就是一个常量,双引号引用起来的任何数据,就是String的一个对象,可是Java依然还给String提供了对应的构造方法。

 

使用双引号可以把数据直接转成String对象,但是有时程序会出现的数据并不能直接使用双引号括起来,这时就需要些代码对其中的数据进行简单的处理,才能得到对应的字符串,String类中提供的有参数的构造方法,可以方便的把某些数组中的数据直接转成字符串。

 

 

把字节数组转成字符串:

 

/*

 * 演示String类的构造方法

 */

public class StringConstructor {

public static void main(String[] args) {

method_2();

}

//演示把字节数组转成字符串对象

public static void method_2() {

byte[] b = {97,98,99,100,101};

//把字节数组中的数字对应的字符转成字符串对象

String s = new String(b);

System.out.println(s);

/*

 * String(byte[] bytes, int offset, int length)

 * 把指定的字节数组中的数据,从offset位置开始转,共计转length个 

 */

String s2 = new String(b,1,3);

System.out.println(s2);

}

//空参数的构造方法

public static void method_1() {

//创建了一个字符串对象,但是这个对象中没有封装任何数据内容

String s = new String();

System.out.println(s);

}

}

 

//面试题目

public static void method_4() {

/*

 * String s = new String("abcde");

 * 2个对象,第一个是通过new关键字创建出来的对象,在堆中

 * 第二个是双引号引用的字符串对象在方法区的字符串常量池中

 */

String s = new String("abcde");

String s2 = "abcde";

System.out.println(s);

System.out.println(s2);

System.out.println(s == s2);

}

//演示把字符数组转成字符串

public static void method_3() {

char[] c = {'A',66,'C'};

//把字符数组转成字符串

String s = new String(c);

System.out.println(s);

}

 

1.3. String类常用方法

1.3.1. 介绍如何查阅一个类中的方法

字符串排序:没有

 

我们猜测到String类中应该提供某些功能之后,接着需要到Stringapi方法摘要中查阅到底有没有这个方法:

查阅方法的基本规则:

1查看这个方法返回值和我们猜测的是否一致

2查看方法的参数列表和当前猜测是否一致。

1.3.2. 获取指定位置上的字符

获取指定位置上的字符数据:

1、猜测方法的返回值是char

2、猜测参数:位置index

String中提供的获取指定位置上的字符方法是charAt

需求判断指定的字符在字符串中出现的次数。

1.3.3. 字符串转成数组(字节和字符)

字符串的等价转换:

转换byte数组或者char数组

返回值应该是byte数组,或者char数组

高级for循环(foreach

1.3.4.  大小写转换

成大写或者小写

 

 

 

 

1.3.5. 字符串中的获取功能

获取字符串的长度:

 

 

 

获取其中一部分字符数据

 

 

 

获取指定字符或者字符串在其他字符串中出现的位置:

 

 

 

 

 

 

需求:统计一个子串原串中出现的次数

1.3.6. 比较方法

比较2字符串大小:

一般比较2数据的大小,返回的情况有三种:

1、 第一个数据比第二个数据大

2、 第一个数据比第二个数据

3、 第一个数据和第二个数据相等

针对这类问题,一般方法返回的是一个int

如果第一个数据大于了第二个数据,返回的是大于零的数

如果第一个数据小于了第二个数据,返回的是于零的数

如果第一个数据等于第二个数据,返回的是零

字符串提供equals方法:

 

String类中的equals方法它仅仅是在比较2字符串是否相同,但无法确定2字符串的大小。

compareTo方法在比较2个串到底大小关系。

1.3.7. 判断方法

判断字符串中是否包含指定的其他数据:

 

 

 

判断字符串是否以指定的内容开始:

 

判断字符串是否以指定的内容结尾:

 

 

 

判断字符串中的内容是否为空,注意不是null.

 

 

1.3.8. 其他方法

 

 

功能是把其他的数据转成字符串。

1.4. String类方法练习

1.4.1. 字符串单个字符数据进行排序

/*

 * 需要:对字符串中的数据进行排序

 * 分析:

 *  排序的要求:把数据先存储到数组中。然后可以使用数组对其中的元素进行排序

 *  排序:选择排序。

 * 

 * 步骤:

 * 1、把字符串转成数组(字符)。

 * 2、对字符数组进行排序

 * 3、把排序后的数组转成字符串

 * 4、打印

 */

public class StringTest {

public static void main(String[] args) {

method_2();

}

//简单实现方案

public static void method_2() {

String s = "aybxzpomq1lc";

char[] cs = s.toCharArray();

//数组排序

Arrays.sort(cs);

//把数组转成字符串

String s2 = Arrays.toString(cs);

System.out.println(s2);

}

//对字符串中的数据进行排序

public static void method_1() {

//指定的字符串

String s = "aybxzpomq1lc";

//把字符串换成字符数组

char[] cs = s.toCharArray();

//排序

forint i = 0 ; i < cs.length -1 ; i++ ){

forint j = i + 1 ; j < cs.length ; j ++ ){

//判断

ifcs[i] > cs[j] ){

char temp = cs[i];

cs[i] = cs[j];

cs[j] =  temp;

}

}

}

//把字符数组转成字符串

String s2 = new String(cs);

System.out.println(s2);

}

}

 

1.4.2. 统计指定字符在字符串中出现的次数

/*

 * 需求:统计指定字符在字符串中出现的次数

 * 分析:

 *  定义变量记录次数(计数器)。

 *  遍历字符串。取出字符串中的每个字符,和指定的需要统计的字符进行判断

 *  如果相同计数器+1,直到循环结束,统计出当前这个字符出现的次数

 * 

 */

public class StringTest2 {

public static void main(String[] args) {

String s = "bfsidjlk";

char ch = 'a';

int count = getCharCount(s,ch);

System.out.println(count);

}

//统计字符串中指定的字符个数

public static int getCharCount(String schar key) {

//定义一个计数器

int count = 0;

forint i = 0 ; i < s.length() ; i++ ){

//取出字符串中的字符

char c = s.charAt(i);

//判断当前这个字符和指定的字符是否相同

ifc == key ){

//判断成立说明当前取出的这个字符和需要统计的字符相同,计数

count++;

}

}

return count;

}

}

 

拓展题目:

统计一个字符串中:字母(大小写)字符、数字字符、其他字符的个数。

1.4.3. 字符串按照指定的内容切割,然后排序

切割”asdithfhsdlitjfklsdjfitlkjsdklitAjdslkf”

/*

 * 需求:对字符串按照指定的内容切割,然后排序

 *  "asdithfhsdlitjfklsdjfitlkjsdklitAjdslkf"

 */

public class StringTest3 {

public static void main(String[] args) {

method_2();

}

 

// 字符串切割之后排序

public static void method_2() {

//String s = "asdithfhsdlitjfklsdjfitlkjsdklitAjdslkf";

//String[] strs = s.split("it");

String[] strs = {"张三","李四","王五","张三三","李思思","王五吴"};

forint i = 0 ; i < strs.length - 1 ; i++ ){

forint j = i+1 ; j <strs.length ; j++ ){

/*

 * 判断2个字符串的大小

 * strs数组的空间中保存的是不同的字符串对象,

 * 而对字符串对象进行大小比较,必须调用String类中的compareTo方法

 */

ifstrs[i].compareTo(strs[j]) > 0 ){

String temp = strs[i];

strs[i] = strs[j];

strs[j] = temp;

}

}

}

//Arrays.sort(strs);

for (int i = 0; i < strs.lengthi++) {

System.out.println(strs[i]);

}

}

// 演示切割

public static void method_1() {

String s = "asdithfhsdlitjfklsdjfitlkjsdklitAjdslkf";

 

String[] strs = s.split("it");

 

System.out.println(strs.length);

for (int i = 0; i < strs.lengthi++) {

System.out.println(strs[i]);

}

}

}

 

1.4.4. 一个字符串按照长度递减截取

/*

 * 需求:把一个字符串按照长度递减截取

 *  "abcde"

 *  

 *  "abcde" 

 *   0-length 

 *   0,5

 *  

 *  "abcd"     "bcde"

 *   0-length-1  1-length

 *   0,4   1,5

 *  

 *  "abc"     "bcd"       "cde"

 *   0-length-2  1-length-1  2-length

 *   0,3   1,4    2,5

 *  

 *  "ab"    "bc"      "cd"    "de"

 *  0,2  1,3    2,4      3,5

 *  

 *  "a"     "b"       "c"      "d"   "e"

 *  

 *  substring(beginIndex  ,endIndex)

 */

public class StringTest4 {

public static void main(String[] args) {

String s = "abcde";

//控制共计能够截取的次数

forint i = 0 ; i < s.length() ; i++ ){

//提供每次截取的过程中,需要截取出多少个子串

//j提供截取的开始位置,k截取的结束位置

for(int j = 0, k = s.length() - i ; k <= s.length() ; j++,k++ ){

String sub = s.substring(jk);

System.out.print(sub+"\t");

}

System.out.println();

}

}

}

 

拓展题

2字符串,找出其中较短的字符串,然后较短的字符串进行长度递减方式截取,当前截取到的字符串在长串中存在的时候,停止截取。

“abcitcastdef”

“aitcastz”

找出2串中长度最长的子串。

 

1.5. String类方法总结

1获取方法

char charAt(int index) 获取指定位置的字符

int  indexOf(int ch) 获取当前字符第一次出现的位置

int  indexOf(int ch , int fromIndex) 获取当前字符指定位置开始第一次出现的位置

int  indexOf(String s  ) 获取当前字符串第一次出现的位置

int  indexOf(String s  , int fromIndex ) 获取当前字符从指定位置第一次出现的位置

int  lastIndexOf( int ch  ) 获取当前字符从后往前第一次出现的位置

int  length()  获取字符串的长度

String  substring(int beginIndex ); 指定位置截取到字符串末尾

String  subString( int beginIndex , int endIndex )beginIndex截取到endIndex,但不包含endIndex

 

2判断方法

int  compareTo(String antherString )方法 比较2字符串大小

boolean equals(String antherString) 判断2字符串是否相同

boolean startsWith(String prefix) 判断字符串是否以指定的字符串开始

boolean endsWith( String suffix ) 判断字符串是否以指定的字符串结尾

boolean  isEmpty()  判断字符串是否是空串

boolean  contains(String antherString ) 判断当前字符串是否包含指定的字符串

3、 转换方法

toUpperCase 成大写

toLowerCase 成小写

getBytes  成字节数组

toCharArray  转成字符数组

valueOf 其他的数据转成字符串

 

4其他方法

trim 去除字符串2的空格

split 根据指定的内容切割


转载于:https://my.oschina.net/u/2503544/blog/535615

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值