黑马程序员-字符串篇

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

一、概述

        String是字符串的类类型,用于描述字符串事物。字符串是一个特殊的对象。特殊之处就在于:

        Stings= new String();String s1=””;两种写法都是在创建对象,使用起来一样。

 注意:在java中,被双引号('')包围的都是字符串,不能作为其它数据类型来使用,如“1+2”输出的结果可能不是3.

可以通过下面的语法格式来声明字符窜变量:

String str =[null];

String :指定该变量为字符串类型;

str:任意有效的标示符,表示字符串变量的名称

null:如果省略null,表示str变量是未初始化的状态,否则表示声明的字符串的值等于null

二、特点

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

例:

        String s1=“abc”

        String s2 = new String“abc”);

        String s3=“abc”

比较的结果:

        s1==s2   ( false )//判断两个对象的哈希地址值是否相同,因为是不同的对象,所以哈希值不可能相等

        s1.equals(s2) ( true )//String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。  

        s1==s3   ( true )  //因为s1和s3引用相同的字符串常量,因此具有相同的实体,也就是说s1和s3是同一个对象

三、常见操作方法

对于已声明的字符串,可以对其进行相应的操作

连接字符串

String s1 ="abc";

String s2="dsf";

String s=s1+s2;

System.out println(s);//输出的结果是abcdsf

1、获取

        1.1、获取长度

               int   length();

//定义一个字符串
String s ="sdfwer";
int i = s.length();
System.out.println(i);//打印出字符串的长度是6

        1.2根据位置获取位置上的某个字符当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。

               char  charAtint  index);

//定义一个字符串
String s ="sdfwer";
char c = s.charAt(2);
System.out.println(c);//打印出结果是f

        1.3根据字符获取该字符存在字符串的位置

              int  indexOfint ch)://返回的是ch在字符串中第一次出现的位置。//传入的是字符对应的ASCII码。//如果没有找到,返回-1

//定义一个字符串
String s ="sdfwer";
int i = s.indexOf(d);
System.out.println(i);//打印出结果是1

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

//定义一个字符串
String s ="sdfwfer";
int i = s.lastIndexOf("f");
System.out.println(i);//打印出结果是4

2.格式化

format(String fornat,Object args);//使用指定的格式字符串和参数返回一个格式化字符串

//定义一个字符串
String s ="sdfwfer";
String format = s.format(s, "s");
System.out.println(format);//打印出结果是sdfwfer

3、判断

  3.1判断字符串内容是否相同

              boolean equalsstr);

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

              boolean equalsIgnoreCase();

       3.3判断字符串中是否包含某一个子串

              boolean containsstr);

//定义一个字符串
String s ="sdfwfer";
boolean b = s.contains("sd");
System.out.println(b);//打印出结果是true

        3.4字符串中是否为空

              boolean isEmpty()

//定义一个字符串
String s ="sdfwfer";
boolean b = s.isEmpty();
System.out.println(b);//打印出结果是false

        3.5判断字符串是否是以指定内容开头

              boolean startsWithstr);

//定义一个字符串
String s ="sdfwfer";
boolean b = s.startsWith("d");
System.out.println(b);//打印出结果是false

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

              boolean endsWithstr);

        

4、转换

        4.1将字符数组转成字符串

             构造函数:String (char[])

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

             静态方法:

                                 static String copyValueOf(char[])

                                 staticString copyValueOf(char[] data,int offset ,int count )

                                 static String valueOf(char[])

        4.2将字符串转成字符数组

              char[] toCharArray()

        4.3将字节数组转成字符串

              String (byte[])

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

        4.4将字符串转成字节数组

              byte[]getBytes()

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

              String valueOf(int)

              String valueOf(double)

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

5、替换

        String replace(oldchar,newchar)//返回的是一个新字符串。如果要替换的字符不存在,返回的还是原字符串。

//定义一个字符串
String s="sdfwfer";
String r = s.replace('s', 'b');
System.out.println(r);//输出的结果是bdfwfer

6、切割

        String[] split(regex)//涉及到正则表达式的点,不能作为切割字符串的regex

//定义一个字符串
String s="sdfw#fer";
String[] r = s.split("#");
System.out.println(r[0]);//输出的结果是bdfw

7、子串,获取字符串中的一部分

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

//定义一个字符串
String s="sdfwfer";
String s1 = s.substring(2);
System.out.println(s1);//输出的结果是fwfer

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

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

        8.1将字符串转成大写或小写

              String toUpperCase();

//定义一个字符串
String s="sdfwfer";
String s1 = s.toUpperCase();
System.out.println(s1);//输出的结果是SDFWFER

              String toLowerCase();

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

              String trim();        

//定义一个字符串
String s ="    sdf wer   ";
System.out.println("("+s+")");//输出原来的字符串
String s1 = s .trim();//调用去掉空格的方法
System.out.println("("+s1+")");//打印出去除空格后结果

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

              int compareTo(String);

四、知识运用

1.获取一个字符串在另一个字符串中出现的次
/*思路;
1.定义一个计数器,count 有计数计就会有循环
2.获取abc第一次出现的位置 index
3.从第一次的位置后剩余的字符串中继续获取abc出现的位置
每获取一次就计数一次
4.当获取不到时,计数完成
*/
class  Test10
{
public static int getSubCount_2(String str,String key)
{
int count =0;//定义一个计数器
int index =0;//定义一个角标变量
while((index=str.indexOf(key,index))!=-1)//如果包含,则继续
{
System.out.println("index="+index);
index=index+key.length();
count++;
}
return count;
}
public static void main(String[] args) 
{
String str="abchndmhabcndhcjdjabcndhabcd";
System.out.println("count="+getSubCount_2(str,"abc"));
}
}

打印结果:

index=0
index=8
index=18
index=24
count=4


2. 需求:对一个字符串中的字符进行自然排序 

思路:1、将字符串转换为字符数组。 2、对字符数组进行选择、冒泡排序 3、将排好序的字符数组转换为字符 
class Test10 {
public static void main(String[] args) {
String s = "fhdjsdjak+ds";
System.out.println(s);// 打印原字符串
System.out.println(raturalSortString(s));// 打印排序后的字符串
System.out.println(getLowerCaseString(raturalSortString(s)));// 打印排序后的小写字母部分
}
// 取出有序字符串中的小写字母部分
public static String getLowerCaseString(String s) {
int[] arr = lowerCaseIndex(s);
return s.substring(arr[0], arr[1]);
}
// 对字符串中的小写字母进行自然排序的方法
public static String raturalSortString(String s) {
// 将字符串转换为字符数组
char[] arr = s.toCharArray();
// 将字符数组进行排序
selectSortArray(arr);


// 将排序好的字符数组转换为字符串返回
return new String(arr);
}
// 对数组进行选择排序
private static void selectSortArray(char[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if (arr[x] > arr[y])
swap(arr, x, y);
}
}
}
// 交换数组两元素
private static void swap(char[] arr, int x, int y) {
arr[x] = (char) (arr[x] ^ arr[y]);
arr[y] = (char) (arr[x] ^ arr[y]);
arr[x] = (char) (arr[x] ^ arr[y]);
}
// 判断小写字母部分在有序字符串中的位置,并将第一个的位置和最后一个的位置存在一个数组中,返回数组
private static int[] lowerCaseIndex(String s) {
// 将字符串转换为字符数组
char[] arr = s.toCharArray();
int x = 0;
for (; arr[x] < 'a'; x++)
;
int y = arr.length - 1;
for (; arr[y] > 'z'; y--)
;
int[] a = { x, y + 1 };
return a;
}
}

打印结果:

fhdjsdjak+ds
+adddfhjjkss
adddfhjjkss


------- android培训java培训、期待与您交流!---------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值