对于字符串类我想我会采用一篇比较长的博文为了直观我还是决定以代码配合输入输出的方式呈现出来。
首先我们定义一个字符串:
String fileName = "dfghjkfl.jpg";
而后我们返回指定位置的字符:
String fileName = "dfghjkfl.jpg";
char c = fileName.charAt(1);
System.out.println(c);
结果如下:
注意我们这里给的参数是1所以它输出了f,可能大家比较疑惑1不应该输出的是d吗?其实如果我们这里给参数0他才会输出d。
接下来是拼接字符串:
String newstr = fileName.concat("abc");
System.out.println(newstr);
再来看结果:
而后判断是否包含指定的字符串:
为了直观我将会编写两段代码来表示。
boolean bool = fileName.contains("df");
boolean bool2 = fileName.contains("UFC");
System.out.println(bool);
System.out.println(bool2);
结果如下:
还有操作就是判断字符串是否以指定的字符串结尾
比如判断我们开始的字符串是否是以".jpg"这个字符串结尾的。
boolean bool2 = fileName.endsWith(".jpg");
System.out.println(bool2);
这里的结果就是true.
我就不写一个false的结果做对比了。这里大家可自己练习下。
既然有结尾就得有开始
下面方法就是判断字符串是否以指定的字符串开头。
boolean bool3 = fileName.startsWith("df");
System.out.println(bool3);
这就是这个方法我们来看看结果
好了我们进入下一个方法,判断字符串是否相同:
boolean bool4 = fileName.equals("dfghjkfl.jpg");
System.out.println(bool4);
结果:
在来一个不常用的方法,
将字符串转化为byte型数组
byte [] bytes = fileName.getBytes();
for(int i = 0;i<bytes.length;i++) {
System.out.print(bytes[i]);
}
这个输出比较怪了,因为byte,他只有一个字节,而在java中的char要占1到6个字节,而且对于此处还要涉及到一个东西叫做ASCII码,这个目前阶段大家可以先记住,以后我再深入的给大家讲解,所以输出结果如下:
判断字符串在该字符串中首次出现的位置如果没有则返回-1,
int n = fileName.indexOf("f");
System.out.println(n);
结果如下:
从指定位置开始判断字符串在该字符串中首次出现的位置,如果没有则返回-1.
示例代码如下:
int index3 = fileName.indexOf("f",4);
System.out.println(index3);
结果如下:
102是f的ascii码,我们也可以用102代替f来做参数。
int index4 = fileName.indexOf(102, 4);
System.out.println(index4);
判断指定字符串在该字符串中,最后一次出现的位置,如果没有则返回-1
int index5 = fileName.lastIndexOf("dfa");//从判断指定字符串在该字符串中最后一次出现的位置 没有则返回-1
System.out.println(index5);
从指定位置开始寻找(从右往左找)判断指定字符串在该字符串中最后一次出现的位置 如果没有则返回-1
int index6 = fileName.lastIndexOf("f",2);
System.out.println(index6);
这里是从右往左找。所以大家注意观察结果:
这里还剩余了很多代码我就不一一演示了,我把代码打上注释给大家发上来。
String s = fileName.trim(); //去除收尾空格
String s1 = fileName.toUpperCase();//转换为大写
String s2 = fileName.toLowerCase();//转换为小写
String s3 = fileName.substring(8); //截取字符串,从8截取到末尾
String s4 = fileName.substring(8,10);//截取字符串,从8开始到10结束
boolean bool5 = fileName.isEmpty();//判断字符串是否为空字符串
int length = fileName.length();//字符串长度
这里还有一个格式化的作用:
比如我们先输出一个日期把其作为Duke同学的生日:
比如现在:(哈哈)
Calendar ca = Calendar.getInstance();
System.out.println(ca);
看下结果:
不知道各位是否看得懂这是什么东西,再说了就算你看懂了,这样对我们人来说,你们觉得这个友好吗?
这里我们用一个String类的format方法修饰完后再输出下。
String ss = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", ca);
System.out.println(ss);
所以我们需要一个格式化的东西:
大家看下这里与上面那一坨比起来是不是友好多了。
拼接字符串(StringBulider,StringBuffer)
对于字符串的拼接大家也许想到了,比较传统的+=方法,但是这个方法并不是很实用我们就用下面一个例子来说明:
比如我们把下面10万个a拼接在一起,大家一定要认真看结果:
long start = System.currentTimeMillis();
String s = "";
for(int i = 0;i<100000;i++) {
s += "a"+i;
}
System.out.println(System.currentTimeMillis()-start);
比如我们先用最传统的“+=”方法来处理结果如下:
大家可以看到这里足足跑了34568毫秒,也就是半分多钟的时间。可见这个方法是多么的恐怖。
下面我们再用Stringbuffer方法:
long start = System.currentTimeMillis();
StringBuffer sb1 = new StringBuffer();
for(int i = 0;i<100000;i++) {
sb1.append("a");
}
System.out.println(System.currentTimeMillis()-start);
没错你没有看错只有6毫秒,这个效率我想我不在细说各位应该也懂了。
而后我们再来看下Stringbulider方法:
StringBuilder sb1 = new StringBuilder();
for(int i = 0;i<100000;i++) {
sb1.append("a");
}
System.out.println(System.currentTimeMillis()-start);
没错StringBulider的效率比StringBuffer还要高:
但是请各位记住两个概念:
- StringBuilder 效率更高 但是线程不安全
- StringBuffer 效率偏低 但是线程安全