面向对象工具——String类


String 类

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

字符串一旦初始化就不可以被改变。

字符串常量池(如果有就拿来用,没有就创建,不用重复创建)


地址值是相等的,证明了以上的结论。



这个为什么是flase:

因为String s="aba"创建一个对象在字符串常量池中。

String s1 = new String("abc")创建了两个对象,在堆内存中一个是 new的对象,另一个是字符串的对象。

(所以比较地址就不一样了)


字符串equals就是比较字符串内容:


 String类的构造函数:

字节byte数组转换为字符串。

字符char数组转换为字符串。

打印一个数组的任意指定开始结束位置。

例如:

char[] arr ={'w','a','p','q','s'}

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

输出结果(apq)


String类的常用方法:

必须掌握的:


例子:



public class StringConstructorDemo {

/*
* 将字节数组或者字符数组转成字符串可以通过String类的构造函数完成。
*/

stringConstructorDemo2();
}

private static void stringConstructorDemo2() {
char[] arr = {'w','a','p','q','x'};
String s = new String(arr,1,3);

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

public static void stringConstructorDemo() {
String s = new String();//等效于String s = "";  不等效String s = null;

byte[] arr = {97,66,67,68};

String s1 = new String(arr);
System.out.println("s1="+s1);

}

}

copyValueof将数组元素转化为字符串。



package cn.itcast.p1.string.demo;


public class StringMethodDemo {


/**
* @param args
*/
public static void main(String[] args) {



/*
* 按照面向对象的思想对字符串进行功能分类。
* "abcd"

* 1,获取:
* 1.1 获取字符串中字符的个数(长度).
* int length();
* 1.2 根据位置获取字符。
* char charAt(int index);
* 1.3 根据字符获取在字符串中的第一次出现的位置.
* int indexOf(int ch)
* int indexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置 
* int indexOf(String str);
* int indexOf(String str,int fromIndex);
* 根据字符串获取在字符串中的第一次出现的位置.
* int lastIndexOf(int ch)
* int lastIndexOf(int ch,int fromIndex):从指定位置进行ch的查找第一次出现位置 
* int lastIndexOf(String str);
* int lastIndexOf(String str,int fromIndex);
* 1.4 获取字符串中一部分字符串。也叫子串.
* String substring(int beginIndex, int endIndex)//包含begin 不包含end 。
* String substring(int beginIndex);
*


* 2,转换。
* 2.1 将字符串变成字符串数组(字符串的切割)
* String[]  split(String regex):涉及到正则表达式.
* 2.2 将字符串变成字符数组。
* char[] toCharArray();
* 2.3 将字符串变成字节数组。
* byte[] getBytes();
* 2.4 将字符串中的字母转成大小写。
* String toUpperCase():大写
* String toLowerCase():小写
* 2.5  将字符串中的内容进行替换
* String replace(char oldch,char newch);
* String replace(String s1,String s2);
* 2.6 将字符串两端的空格去除。
* String trim();
* 2.7 将字符串进行连接 。
* String concat(string);

* 3,判断
* 3.1 两个字符串内容是否相同啊?
* boolean equals(Object obj);
* boolean equalsIgnoreCase(string str);忽略大写比较字符串内容。
* 3.2 字符串中是否包含指定字符串?
* boolean contains(string str);
* 3.3 字符串是否以指定字符串开头。是否以指定字符串结尾。
* boolean startsWith(string);
* boolean endsWith(string);
*
* 4,比较。
*
*/
stringMethodDemo_4();

// System.out.println("abc".concat("kk"));
// System.out.println("abc"+"kk");

// System.out.println(String.valueOf(4)+1);
// System.out.println(""+4+1);

}


private static void stringMethodDemo_4() {

System.out.println("abc".compareTo("aqz"));对于对象的比较用的是方法(字符串本身就是对象),对于基本数值的比较用的是符号完成的
}


private static void stringMethodDemo_3() {
String s = "abc";
System.out.println(s.equals("ABC".toLowerCase()));
System.out.println(s.equalsIgnoreCase("ABC"));

System.out.println(s.contains("cc"));

String str  = "ArrayDemo.java";

System.out.println(str.startsWith("Array"));所有以这个开头的
System.out.println(str.endsWith(".java"));所有java的
System.out.println(str.contains("Demo")); 所有包含Demo的
}


private static void stringMethodDemo_2() {

String  s = "张三,李四,王五";
String[] arr = s.split(",");

for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}

char[] chs = s.toCharArray();

for (int i = 0; i < chs.length; i++) {
System.out.println(chs[i]);
}
s = "ab你";
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}

System.out.println("Abc".toUpperCase());


String s1 = "java";
String s2 = s1.replace('q', 'z');
System.out.println(s1==s2);//true

System.out.println("-"+"    ab  c    ".trim()+"-");

}


private static void stringMethodDemo_1() {

String  s = "abcdae";

System.out.println("length:"+s.length());//6
System.out.println("char:"+s.charAt(2));//c//StringIndexOutOfBoundsException
System.out.println("index:"+s.indexOf('k'));//0//-1 我们可以根据-1,来判断该字符或者字符串是否存在。
System.out.println("lastIndex:"+s.lastIndexOf('a'));//4


System.out.println("substring:"+s.substring(2,4));
}


}

StringBuffer:

public class StringBufferDemo {


/**
* @param args
*/
public static void main(String[] args) {


/*
* StringBuffer:就是字符串缓冲区。
* 用于存储数据的容器。
* 特点:
* 1,长度的可变的。 
* 2,可以存储不同类型数据。
* 3,最终要转成字符串进行使用。
* 4,可以对字符串进行修改。


* 既然是一个容器对象。应该具备什么功能呢?
* 1,添加:
* StringBuffer append(data);
* StringBuffer insert(index,data);
* 2,删除:
* StringBuffer delete(start,end):包含头,不包含尾。
* StringBuffer deleteCharAt(int index):删除指定位置的元素 
* 3,查找:
* char charAt(index);
* int indexOf(string);
* int lastIndexOf(string);
* 4,修改:
* StringBuffer replace(start,end,string);
* void setCharAt(index,char);

* 增删改查  C(create)U(update)R(read)D(delete) 



*/
bufferMethodDemo_2();
}

private static void bufferMethodDemo_2() {
StringBuffer sb = new StringBuffer("abce");

// sb.delete(1, 3);//ae

//清空缓冲区。
// sb.delete(0,sb.length());
// sb = new StringBuffer();

// sb.replace(1, 3, "nba");
// sb.setCharAt(2, 'q');

// sb.setLength(10);

// System.out.println("sb:"+sb);
// System.out.println("len:"+sb.length());

System.out.println(sb.reverse());


}


private static void bufferMethodDemo_1() {
StringBuffer sb = new StringBuffer("abce");

// sb.append("xixi");
sb.insert(2, "qq");

System.out.println(sb.toString());
}


public static void bufferMethodDemo(){
//创建缓冲区对象。
StringBuffer sb = new StringBuffer();

sb.append(4).append(false);//.append("haha");
sb.insert(1, "haha");
// sb.append(true);

System.out.println(sb);

}




}





public class StringBuilderDemo {

public static void main(String[] args) {



/*
* jdk1.5以后出现了功能和StringBuffer一模一样的对象。就是StringBuilder

* 不同的是:
* StringBuffer是线程同步的。通常用于多线程。
* StringBuilder是线程不同步的。通常用于单线程。 它的出现提高效率。

* jdk升级:
* 1,简化书写。
* 2,提高效率。
* 3,增加安全性。
*/


}


}



/*
class StringBuffer jdk1.0
{
object lock;
public   StirngBuffer append(int x)
{
synchronized(lock)
{
}
}


public synchronized StringBuffer delete(int start,int end)
{
synchronized(lock)
{
}
}
}
*/





public class StringBuilderTest {


/**
* @param args
*/
public static void main(String[] args) {


int[] arr = {3,1,5,3,8};
String s = arrayToString_2(arr);

System.out.println(s);
}
public static String arrayToString_2(int[] arr){

StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1)
sb.append(arr[i]+", ");
else
sb.append(arr[i]+"]");
}
return sb.toString();//不能直接返回sb,因为不是String类型,要toString一下。
}

/**
* 将一个int数组变成字符串。
*/
public static String arrayToString(int[] arr){

String str = "[";
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1)
str+=arr[i]+", ";
else
str+=arr[i]+"]";
}

return str;
}


}


toString方法: 解析。

//测试就是将long类型使用toString()方法输出为String类型
public  class  JLDtoS
{
   public  static  void  main(String[]args)
   {
    long  a= 123 ;
    Long aa= new  Long(a); //使用包装类
    String ii=aa.toString(); //使用aa对象的toString()方法
    System.out.println(ii); //输出转换的结果
   }
}
//object中的toString方法是对象才能调用的
输出结果:123
注意:toString() 只适用于对象的调用,普通的数据类型不可以调用,这也就是使用包装类的原因。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值