1 //java基础视频教程第13天-01-String(概述)
2 /*
3 记住:
4 1.它是一个对象
5 2.它是一个常量,不能改变
6 3.
7 */
8 class StringDemo
9 {
10 public static void main(String[] args)
11 {
12 String s1 = "abc"; //s1是一个类类型变量,"abc"其实是一个对象
13 //s1 = "dsaflsaf"; //其实是s1的地址改变了,而"abc"的内容并没有改变,所以字符串一点初始化就不会改变
14 String s2 = new String("abc");
15
16 //s1和s2有什么区别:s1是一个对象,s2是两个对象,说明一下,内存中有个常量池,每一个变量都从中会从中抽取a-z等的字符组成一个对象
17
18 System.out.println(s1==s2);
19 System.out.println(s1.equals(s2)); //Object中的equal方法是比较地址值,但是String继承过来之后重写了方法,比较的是字符串的内容是否相同
20 }
21 }
1 //java基础视频教程第13天-02-String(常见功能-获取和判断)
2 /*
3
4 1.查询
5 1.1查找字符串长度
6 int lengch();
7 1.2根据s索引查字符
8 char charAt(int index); //从查找指定位置的字符
9 1.3根据字符查索引或者从指定位置开始查
10 int indexOf(int ch) //z注意:传的值是ASSIC码,也可以传ASSIC对应的数字,所以这里是int
11 int indexOf(int ch,int int fromindex); //重指定的位置fromindex开始查找ch出现的位置,注意,如果查询的ch没有就会返回-1,如果查询位置fromindex超过了角标,会出角标越界错误
12
13 int indexOf(String str) //indexof不仅可以查询单个字符还可以查找字符串
14 int indexOf(String str,int fromindex)
15
16 反向索引:
17 lastIndexOf(int ch); //从最后面开始查询你要查的字符
18 codePointAt(int index); //返回给定的字符的ASSIC码
19
20 2.判断
21 2.1字符串中是否为空
22 boolean isEmpty() //""这是一个对象,null这个是空 //1.6以后才有,其实就是判断字符串长度是否为0
23 2.2字符串中是否包含某个字符
24 boolea contains(CharSequence s) //CharSequence是一个接口
25 还有一个也可以判断字符串中是否包含某个字符,
26 int indexOf(String str),当返回结果是-1时表示没有,这个既可以判断是否有某个字符,也可以判断某个字符在那个位置
27 if(indexOf("aa")!=-1);表示存在aa这个字符
28
29 2.3查看字符串是否以某个字符开始的
30 boolean startsWith(String str)
31 2.4查看字符串是否以某个字符结束的
32 boolean endsWith(String str);
33 2.5查看字符串的内容是否一样,复写了Object的方法
34 boolean equals(str);
35 忽略大小写
36 boolean equalsIgnoreCase(str);
37 */
38 class StringMethodDemo
39 {
40 private static String str = "ArrayDemo.java";
41 public static void GetValue()
42 {
43 sop(str.length());
44 sop(str.charAt(4));
45 sop(str.indexOf("a"));
46 sop(str.indexOf("a",11));
47 sop(str.indexOf("Demo"));
48 sop(str.lastIndexOf("a"));
49 sop(str.codePointAt(5));
50 }
51 public static void Search()
52 {
53 sop(str.isEmpty());
54 sop(str.contains("Demo"));
55 sop(str.startsWith("Array"));
56 sop(str.endsWith(".java"));
57 }
58 public static void main(String[] args)
59 {
60 /*
61 String s1 ="abc";
62 String s2 = new String("abc");
63
64 String s3 = "abc";
65
66 System.out.println(s1==s2);
67 System.out.println(s1==s3); //结果为true,当字符串在常量池中已经定义了,就不会在重新定义了,另一个类类型变量指向它时,其实是相同的字符串,常量池存在于静态区
68 */
69 GetValue();
70 Search();
71 }
72 public static void sop(Object obj) //基本数据类型的类型提升,1.5版本之后的一个新特性,装箱。
73 {
74 System.out.println(obj);
75 }
76 }
77
78
79
1 //java基础视频教程第13天-03-String(常见功能-转换)
2 /*
3 3.转换:
4 3.1把一个字符串数组或者字节数组字转换为一个字符串
5 构造方法
6 String(char[] arr)
7 String(char[] arr,int offset,int count) //从数组中第几个位置取多少个字符转换成字符窜
8
9 String(byte[] arr)
10 String(byte[] arr,int offset,int count) //字节数组也是一样的转换的
11
12 静态方法
13 static String copyValueOf(char[] arr)
14 static String copyValueOf(char[] arr,int offset,int count)
15 还有一个相同功能的
16 static String valueOf(char[] arr)
17 static String valueOf(char[] arr,int offset,int count)
18 valueOf()比copyValueOf()多一个功能,它可以将基本数据类型转换为字符串
19 static String valueOf(int); //3+""就相当于String.valueOf(3);
20 static String valueOf(double);
21 3.2将字符串转换为字符数组或者字节数组
22 char[] toCharArray(); //转换成字符串数组
23 byte[] getBytes(); //转换成字节数组
24
25
26 特殊:字符串和字符数组在转换的过程中,是可以指定编码表的?????不懂
27 */
28 class StringChangeDemo
29 {
30 public static void Change()
31 {
32 String s = "slfjglalgjlsgla";
33 String s1 = "334940";
34 char[] str= {'a','c','d','d','s','r'};
35 byte[] num= {2,3,5,6,9,3,4};
36 String s2 = new String(str,2,3);
37 String s3 = new String(str);
38 sop(s2);
39 sop(s3);
40 String s4 = new String(num);
41 String s5 = new String(num,2,2);
42 sop(s4);
43 sop(s5);
44
45
46 sop(String.copyValueOf(str));
47 sop(String.copyValueOf(str,2,3));
48 //sop(String.copyValueOf(num)); //注意copyValueOf没有转换字节数组的功能
49 //sop(String.copyValueOf(num,2,4)); //注意copyValueOf没有转换字节数组的功能
50
51 char[] arr = s.toCharArray();
52 for (int x=0;x<arr.length;x++ )
53 {
54 sop(arr[x]);
55 }
56 byte[] count = s1.getBytes();
57 for (int x=0;x<count.length;x++ )
58 {
59 sop(count[x]); //结果令我很不理解???
60 }
61
62 sop(String.valueOf(3));
63
64 }
65 public static void main(String[] args)
66 {
67 Change();
68 }
69 public static void sop(Object obj)
70 {
71 System.out.println(obj);
72 }
73 }
1 //java基础教程第13天-04-String(常见功能-切割和替换)
2 /*
3 4.替换
4 String replace(String old,String new); //可以替换单个字符也可替换字符串
5 5.分割
6 String[] split(regex); //按照指点的规则分割字符,返回的是一个字符串数组
7 6.获取字符串中的一部分,即获取子串
8 String substring(int begin); //从指点位置取到结尾,如果没有指定位置,就会出现角标越界
9 String substring(int begin,int end); //可以取到头,但是娶不到尾
10 */
11
12 class StringReplaceDemo
13 {
14 public static void replace()
15 {
16 String str = "hallojava";
17 String s = "StringReplaceDemo.java";
18 sop(str.replace("a","e")); //要注意一点,替换后是一个新字符串,原来的字符串并没有改变
19 sop(s.replace("java","txt")); //因为字符串一旦定义就不会改变
20 }
21 public static void split()
22 {
23 String str="张三,李四,王五,马六";
24 String[] name =str.split(",");
25 for (int x=0;x<name.length;x++ )
26 {
27 sop(name[x]);
28 }
29 }
30 public static void subString()
31 {
32 String str = "StringReplaceDemo.java";
33 sop(str.substring(0,6)); //从指定位置取出字符。
34 }
35 public static void main(String[] args)
36 {
37 replace();
38 split();
39 subString();
40 }
41 public static void sop(Object obj)
42 {
43 System.out.println(obj);
44 }
45 }
1 //java继承视频教程第13天-05-String(常见功能-比较和去除空格)
2 /*
3 7.转换,去除空格,比较
4 7.1转换字符串大小写
5 String toUpperCase();
6 String toLowerCase();
7 7.2去除字符串两端的空格
8 String trim();
9 7.3比较两个字符串的ascall码
10 int compareTo(String str); //相同为0,小于为负数,大于为正数,比较的是每个为指上字符的ascall值大小
11 */
12 class trimDemo
13 {
14 public static void change()
15 {
16 String str1 = "hsgkkasghk";
17 String str2 = "SHKFSKGAGL";
18 sop(str1.toUpperCase());
19 sop(str2.toLowerCase());
20 }
21 public static void trim()
22 {
23 String str = " fall java ";
24 sop(str.trim());
25 }
26 public static void compareTo()
27 {
28 String str1 = "acc";
29 String str2 = "aaa";
30 sop(str1.compareTo(str2));
31 }
32 public static void main(String[] args)
33 {
34 change();
35 trim();
36 compareTo();
37 }
38 public static void sop(Object obj)
39 {
40 System.out.println(obj);
41 }
42
43 }
1 //java视频教程13天-06-String(字符串练习1)
2 /*
3 自己写一个去掉字符串首尾空格的功能
4 思路:
5 通过循环查询空字符位置,把指针定位到不是空字符上的位置上,然后通过该位置抽取字符串首尾不是空格的片段
6 */
7 class StringTest1
8 {
9 public static void main(String[] args)
10 {
11 String str =" ddaf dda d ";
12 int start =0;
13 int end =str.length()-1; //为什么要减去1,因为,字符长度和下标差1,如果不减1的话,charAt(length)会角标越界
14 if(end>=start) //确保这是一个有字符的字符串
15 {
16 while(str.charAt(start)==' ')
17 start++;
18 while(str.charAt(end)==' ')
19 end--;
20 }
21
22
23 System.out.println(str.substring(start,end+1)); //这里加1是因为substring只能取头不能取尾巴,加上就可以把最后那个字符算上
24 }
25 }
1 //java基础视频教程第13天-07-String(字符串练习)
2 /*
3 要求:将一个字符串翻转
4 思路:
5 1.将字符串变成数组
6 2.将数组反转
7 3.将数组变成字符串
8 */
9 class StringTest2
10 {
11 static String str = "abcdefg";
12 public static String reverseString(String str,int start,int end) //改变某一段位置上的字符顺序
13 {
14 char[] arr = str.toCharArray();
15 reverse(arr,start,end);
16 return new String(arr);
17 }
18 public static String reverseString(String str)
19 {
20 return reverseString(str,0,str.length()); //调用复写的方法
21 }
22
23 public static void reverse(char[] arr,int x,int y)
24 {
25 for (int start=x,end = y-1 ; end>start ; start++,end--) //这里的y-1是考虑到取头不取尾,思考方向在数组角标和数组长度的问题上,如果这里不减的话,调用者那个地方就要减1
26 {
27 swap(arr,start,end);
28 }
29 }
30 public static void swap(char[] arr,int x,int y)
31 {
32 char temp =arr[x];
33 arr[x] = arr[y];
34 arr[y] = temp;
35 }
36 public static void main(String[] args)
37 {
38 System.out.println(reverseString(str,2,6)); //指定位置反转
39 System.out.println(reverseString(str)); //整个字符串反转
40 }
41
42 }
1 //java基础视频教程第13天-08-String(字符串练习)
2 /*
3 获取一个字符串在另一个字符串中出现的次数
4 "ddffssaadd ddsssdddsssssddd"
5 思路:通过indexof查询并计数
6 */
7 class StringTest3
8 {
9 //方法一:用indexOf(int key)和substring
10 public static int getCount(String str,String key)
11 {
12 int index = 0;
13 int count = 0;
14 while((index=str.indexOf(key))!=-1)
15 {
16 sop("str="+str);
17 str =str.substring(index+key.length());
18 count++;
19 }
20 return count;
21 }
22 //方法二:用indexOf(int key,int fromindex)
23 public static int getCount1(String str,String key)
24 {
25 int index =0;
26 int count =0;
27 while((index = str.indexOf(key,index))!=-1)
28 {
29 sop(index);
30 index = index+key.length();
31 count++;
32 }
33 return count;
34 }
35 public static void main(String[] args)
36 {
37 String str = "ddffssaadd ddsssdddsssssddd";
38 String key= "dd";
39 sop(getCount(str,key));
40 sop(getCount1(str,key));
41 }
42 public static void sop(Object obj)
43 {
44 System.out.println(obj);
45 }
46 }
1 //java基础视频教程第13天-09-String(字符串练习)
2 /*
3 两个字符串作比较,获取两个字符串相同的最大部分字符串
4 思路:通过不断缩小小的那一个字符串得到它的字串,然后查看大字符串中是否包含它的这些字串
5
6 //等待研究???????????????????????????????????????????????????????????????????????????????????????????????????
7 */
8 class StringTest4
9 {
10 public static String getMaxSubString(String s1,String s2)
11 {
12 String max,min;
13 max = (s1.length()>s2.length())?s1:s2; //为了提高效率判断一下传进来的字符那个短,那个长
14 min = (max==s1)?s2:s1;
15 sop(max+"-----------------"+min);
16 for (int x=0; x<s2.length(); x++)
17 {
18 for (int y=0,z=min.length()-x; z!=min.length()+1; y++,z++) //不懂z!=s2.length()+1????????????????????
19 {
20 String temp = min.substring(y,z);
21 sop(temp);
22 if(max.contains(temp))//if(s1.indexOf(temp)!=1)
23 return temp;
24 }
25 }
26 return "";
27 }
28 public static void main(String[] args)
29 {
30 String s1="abcwerthelloyuiodef";
31 String s2="cvhellobnm";
32 sop(getMaxSubString(s1,s2));
33 }
34 public static void sop(Object obj)
35 {
36 System.out.println(obj);
37 }
38 }
1 //java基础视频教程第13天-10-StringBuffer(常见功能-添加)
2 /*
3 字符串缓冲区
4 StringBuffer缓冲区特点就像一个容器,首先明白,StringBuffer是一个写了final关键字的类,并且它有很多构造方法,可以直接传值,也可以不传,其次是它的方法append,insert返回类型也是StringBuffer
5 特点:
6 1.长度是可以变化的
7 2.可以存任意类型数据
8 3.最终通过toString方法变成字符串
9 CURD:creat update read delete
10 1.存储:
11 StringBuffer append() 将参数添加到已有的数据的结尾处
12 StringBuffer isnert(int 插入的位置,要插入的数据),将数据插入到指点的位置上
13 */
14 class StringBufferDemo
15 {
16 public static void main(String[] args)
17 {
18 StringBuffer sb = new StringBuffer(); //面盆理论
19 StringBuffer sb1 = sb.append(88);
20 sb.append("abc").append(34).append(true).insert(2,"xxxxx"); //方法调用链
21 sop(sb.toString());
22 //sop(sb1.toString());
23 }
24 public static void sop(String str)
25 {
26 System.out.println(str);
27 }
28 }
1 //java基础视频教程13天-11-StringBuffer(常见功能-删除和修改)
2 /*
3 删除:
4 delete(int start,int end) //删除包含头不包含尾
5 deleteCharAt(int index) //删除指点位置上的单个字符
6 delete(0,sb.length()) //清空缓冲区数据
7
8 获取:
9 获取字符串缓冲区中的字符串的长度
10 int length();
11 根据索引获取字符
12 char charAt(int index)
13 根据字符查索引
14 int indexOf(String str)
15 int indexOf(String str,int fromIndex)
16 获取子字符串
17 substring(int start)
18 substring(int sart,int end)
19
20 修改:
21 StringBuffer replace(int start,int end,String str); //注意:替换之包含头不包含尾
22 void setCharAt(int index,char ch); //修改单个字符 //注意:无返回值
23
24
25 反转
26 StringBuffer reverse(); //反转之后任是一个字符串缓冲区
27
28 把字符串缓冲区中的指定数据存到指定的数组中
29 void getChars(int srcBegin,int srcEnd,char[] dst,int dstiBegin) //说明:srcBegin表示从字符串缓冲区中选择一个开始位置,选择一个srcEnd结束位,char[] det指定的字符数组,desiBegin,重数组的第几位开始存
30 //还有要注意一点,取字符的时候取头不取尾//由于Stringbuffer中没有toCharArray()方法才有这个方法
31 */
32 class StringBufferDeleteDemo
33 {
34 public static void StringBufferDelete()
35 {
36 StringBuffer sb = new StringBuffer("abcdef");
37 sop(sb.toString());
38 //sop(sb.delete(2,4)); //delete删除包含头不包含尾,delete返回的也是StringBuffer字符串缓冲区对象,所以可以直接打印
39 //sb.delete(2,3); //删除一个字符c,相当于deleteCharAt()
40 sb.deleteCharAt(2);
41 sb.delete(0,sb.length()); //清空缓冲区,字符串缓冲区对象也是有长度方法的,
42 sop(sb.toString());
43 }
44 public static void StringBufferReplace()
45 {
46 StringBuffer sb = new StringBuffer("abcdef");
47 sb.replace(1,4,"java"); //只包含头不包含尾部,其实替换的是1-3的bcd
48 sb.setCharAt(4,'x');
49 sop(sb.toString());
50 }
51 public static void StringBufferArray()
52 {
53 StringBuffer sb = new StringBuffer("abcdef");
54 char[] ch = new char[8];
55 sb.getChars(1,6,ch,2); //看见没有我要取f,f是5号,就要设置成6,取头不取尾巴
56 for (int x=0;x<ch.length;x++ )
57 {
58 sop("ch"+"["+x+"}="+ch[x]);
59 }
60
61 }
62 public static void main(String[] args)
63 {
64 StringBufferDelete();
65 StringBufferReplace();
66 StringBufferArray();
67 }
68 public static void sop(Object obj)
69 {
70 System.out.println(obj);
71 }
72 }
73
1 //java基础视频教程第13天-12-(StringBuilder)
2 /*
3 JDK1.5之后出现了替换StringBuffer类StringBuilder
4 不同之处在于,StringBuilder不支持线程同步,提高了效率
5 而StringBuffer支持线程同步,但是效率低下
6 所以以后开发用StringBuilder,对于安全同步的的问题,可以自己加锁
7
8 JDK的更新升级通过以下三点来判读:
9 1.提高效率
10 2.简化代码
11 3.提高 安全问题
12
13 */
1 //java基础视频教程第13天-13-(基本数据类型对象包装类)
2 /*
3 基本数据类型对象包装类
4 byte Byte
5 short Short
6 int Integer //不同
7 long Long
8 double Bouble
9 float Float
10 char Character //不同
11 boolean Boolean
12
13 基本数据类型和字符串类型之间的转换
14
15 基本数据类型转换成字符串类型
16 基本数据类型+""
17 static toString(int num);
18
19 字符串类型转换成基本数据类型
20 静态方法转换:
21 xxx a = Xxx.parsexxx(String str)
22 int a = Integer.parseInt("123");
23 double b = Double.parseDouble("12.44");
24
25 特殊:
26 Boolean.parseBoolean("true/false")
27
28 还有character没有这个方法,
29 非静态方法转换:
30 还有一种方法可以把字符串或者整数作为参数通过构造方法传入创建一个对象
31 然后用,然后用intValue把这个对象变成int类的值
32 Integer i = new Integer("34342"/234234);
33 int num = i.intValue(); //返回int类型的值
34
35
36 进制转换
37 static toBinaryString()
38 static toHexString()
39 static toOctalString()
40
41 把其他进制转换成十进制
42 其实就是把字符串转换成基本数据类型的那个方法,只不过要加上想对应进制的参数 readix
43 static parseInt(String s,int radix)
44
45
46
47 */
48 class IntegerDemo
49 {
50 public static void main(String[] args)
51 {
52 sop("int max :"+Integer.MAX_VALUE);
53 sop(Integer.toString(344235));
54 int num = Integer.parseInt("434"); //必须传入数字格式的字符串
55 sop(num+4);
56 sop(Integer.toBinaryString(6));
57 sop(Integer.toHexString(60));
58 sop(Integer.toOctalString(8));
59
60 sop(Integer.parseInt("3c",16));
61 sop(Integer.parseInt("10",8));
62 sop(Integer.parseInt("1010",2)); //第二个数代表进制数
63 }
64 public static void sop(Object obj)
65 {
66 System.out.println(obj);
67 }
68 }
1 //java基础视频教程第13天-14-(基本数据类型对象包装类新特性)
2 /*JDK1.5版本以后出现的新特性
3 自动装箱,自动拆箱
4 */
5 class IntegerDemo1
6 {
7 public static void main(String[] args)
8 {
9 Integer c = new Integer("123");
10 Integer d = new Integer(123);
11 sop("c==d:"+(c==d)); //不等,因为是两个对象
12 sop("c.equals(d):"+c.equals(d)); //Integer复写了Object里面的equals方法,比较的是数字是否相同,所以为true
13 sop("c.compartTo(d):"+c.compareTo(d)); //比较两个Integer对象中的数字类容是否相同,相同为0.不同为-1
14
15 //JDK1.5之后出现的新特性:自动装箱和自动拆箱
16
17 Integer s = new Integer("3");
18 Integer g = 3; //g是一个引用数据类型,指向的是一个对象,这里3相当于new Integer("3"),是一个对象,这就是新特性,自动装箱
19 g = g/*g.intValue(),拆箱原理*/+2; // 这里的g是一个对象,然后自动拆箱成为int类型,然后与2进行运算,最后把和自动装箱赋给g
20 sop("g="+g);
21
22 Integer x = 128; //对于JDK以后的新特性,超出byte之后的数都会产生新对象
23 Integer y = 128;
24 sop("x+y:"+(x==y)); //false
25 Integer a = 127; //对于JDK1.5以后的新特性,在byte之内的数不会产生新对象
26 Integer b = 127;
27 sop("a+b:"+(a==b)); //true
28 }
29 public static void sop(String str)
30 {
31 System.out.println(str);
32 }
33 }