标签:
【JavaSE】day01_ API文档 、 字符串基本操作
--20150820
2)String常量池
当我们通过字面量,常量来初始化一个字符串时,JVM首先会从字符串的常量池(一个JVM内部维护的内存区域,用来保存已经创建过的字符串对象)中查询用来保存该字符串的对象是否存在,若存在则直接引用,若不存在则创建该字符串对象并存入常量池,然后引用它。因为字符串内容不能改变,所以我们可以放心的重用他们。
3)内存编码及长度
package day01;
/**
* int lenght()
* 获取当前字符串中的字符个数(长度),无论是中英文
* 每个字符占两个字节(Unicode编码)
* @author soft01
*
*/
public class StringLengthDemo {
public static void main(String[] args) {
String str = "我爱,java";
System.out.println(str.length()); //7
}
}
package day01;
/**
* int indexOf(String str)
* 查找给定的字符串在当前字符串中第一次出现的位置。
* 返回值为给定的字符串第一个字符在当前字符串的下标
* 由于java大小写敏感,所以必须全部匹配上才返回具体下标。否则返回-1
* @author soft01
*
*/
public class IndexOfDemo {
public static void main(String[] args) {
String str = "thinking in java";
//检查in的位置
int index = str.indexOf("in");
System.out.println(index); //2
/*
* 重载方法:
* indexOf(String str,int from)
* 从当前字符串指定下标位置开始查找第一次出现
* 给定字符串的位置。
* 同样的,若没有找到返回-1。
*/
index = str.indexOf("in",2); //下标
System.out.println(index); //2
index = str.indexOf("in",3);
System.out.println(index); //5
/*
* int lastIndexOf(String str)
* 查找当前字符串中最后一次出现给定字符串的位置。
*/
index = str.lastIndexOf("in");
System.out.println(index); //9
/*
* 实际应用中,常被用作检查一个字符串是否出现
* 了要求的关键字,甚至确定位置使用。
*/
}
}
package day01;
/**
* 获取字符串中的部分内容
* substring(int start,int end)
* 从指定下标start处对应的字符开始,截取到指定下标end处
* 之间的字符串,需要注意,不包含end位置的字符。
* java API中凡是使用2个数字表示一个范围,通常都是"含头不含尾"的。
*
* @author soft01
*
*/
public class SubstringDemo {
public static void main(String[] args) {
String str = "www.baidu.com";
System.out.println(str.length()); //13
String substr1 = str.substring(4,9);
System.out.println(substr1); //baidu
String substr2 = str.substring(4,13); //str.length()-13
System.out.println(substr2); //baidu.com
////一个参数,从指定下标到结尾
String substr3 = str.substring(4);
System.out.println(substr3); //baidu.com
}
}
package day01;
/**
* String trim()
* 去除当前字符串中两边的空白
* @author soft01
*
*/
public class TrimDemo {
public static void main(String[] args) {
String str = " hello world ";
System.out.println(str);
String trim = str.trim();
System.out.println(trim);
System.out.println();
}
}
例如:
package day01;
/**
* char charAt(int index)
* 获取当前字符串中指定位置(下标)对应的字符
* @author soft01
*
*/
public class CharAtDemo {
public static void main(String[] args) {
String str = "thinking in java";
char c = str.charAt(0);
System.out.println(c); //t
}
}
package day01;
/**
* boolean startsWith(String str)
* --判断当前字符串是否以给定的字符串开头的
* boolean endsWith(String str)
* --判断当前字符串是否以给定的字符串结尾的
* @author soft01
*
*/
public class StartsWithDemo {
public static void main(String[] args) {
String str = "thinking in java";
boolean starts = str.startsWith("think");
System.out.println(starts); //true
boolean end = str.endsWith("va");
System.out.println(end); //true
}
}
package day01;
/**
* String toUpperCase()
* String toLowerCase()
* 将当前字符串中的英文部分转换成全大写和全小写。
* @author soft01
*
*/
public class ToUpperCaseDemo {
public static void main(String[] args) {
String str = "我爱Java1.8";
String upper = str.toUpperCase();
System.out.println(upper);
String lower = str.toLowerCase();
System.out.println(lower);
//通常用来忽略大小写判断(例如验证码判断)
}
}
package day01;
/**
* static String valueOf()
* 字符串提供了若干的静态方法valueOf()
* 作用就是将其他类型转换为字符串。
* 比较常用的是将基本类型转换成字符串。
*
* @author soft01
*
*/
public class ValueOfDemo {
public static void main(String[] args) {
int a = 123;
String s1 = String.valueOf(a); //"123"
System.out.println(s1+4); //"1234"
System.out.println(a+4); //127
System.out.println(a+""+4); //"1234"
double d = 123.123;
String s2 = String.valueOf(d); //"123.123"
System.out.println(s2+4); //"123.1234"
System.out.println(d+4); //127.123
String s3 = 123+""; //没有String.valueOf(a)效率高
}
}
该类封装了可变的字符串,换句话说,当我们需要改变字符串内容时,并不会创建新对象,而是在原对象基础上进行修改。从而减小了内存的开销。
StringBuilder是非线程安全的,并发处理的,性能稍快
代码演示:
package day01;
/**
* java.lang.StringBuilder
* 内部维护一个可变的字符数组。为了解决频繁修改
* 字符串内容带来的性能损耗。
* 内部提供了用于编辑字符串的相关方法:
* 增删改插
*
* @author soft01
*
*/
public class StringBuilderDemo {
public static void main(String[] args) {
String str = "努力学习java,为了找个好工作!";
StringBuilder sb1 = new StringBuilder(); //""
StringBuilder sb = new StringBuilder(str); //还可以是字符串直接量
//System.out.println(sb.hashCode());
/*
* 努力学习java,为了找个好工作!然后改变世界!
* StringBuilder append(String str)
* 在当前字符串末尾追加给定内容
*/
sb.append("然后改变世界!");
str = sb.toString();
System.out.println(str);
//System.out.println(sb.hashCode());
/*
* 努力学习java,为了改变世界!
* StringBuilder delete(int start,int end)
* 删除当前字符串中给定范围内的字符串
*/
sb.delete(11,19);
str = sb.toString();
System.out.println(str);
StringBuilder sb2 = sb;
/*
* 努力学习java,就是为了改变世界!
* StringBuilder insert(int offset,String str)
* 将给定的字符串内容插入到指定位置处
*/
sb.insert(9,"就是");
str = sb.toString();
System.out.println(str);
//System.out.println(sb2==sb);
//System.out.println(sb2);
/*
* 活着,就是为了改变世界!
* StringBuilder replace(int start,int end,String str)
* 将当前字符串中给定范围内的字符串替换为给定的字符串
*/
sb.replace(0,8,"活着");
str = sb.toString();
System.out.println(str);
/*
* 字符串反转
*/
sb.reverse();
str = sb.toString();
System.out.println(str);
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
【JavaSE】day01_ API文档 、 字符串基本操作
标签:
原文地址:http://blog.csdn.net/u011637069/article/details/47816411