//一维数组 String数组初始化区别 首先应该明白java数组里面存的是对象的引用,所以必须初始化才能用; String[] str = {"1","2","3"}与String[] str = newString[]{"1","2","3"}在内存里有什么区别? 这里的区别仅仅是代码书写上的: 改为: f(new String[] {"1","2","3"}); 还可以 String s=new String[30]; 如果没有显式赋值,则系统自动赋默认值null。 PS: Java数组是在Java编程中经常使用的一个类,下面是对Java数组的使用说明。 1.Java数组的语法: String[数组下标], Java数组的下标是从0开始的。 2.示例代码 public class StringArray //修改java数组的第二个元素为 a //Java数组的长度 // 输出java数组 } 输出如下: java字符数组,java数组的定义与使用二维数组 String[] str = new String[5]; //创建一个长度为5的String(字符串)型的一维数组 String[] str = new String[]{"","","","",""}; String[] str = {"","","","",""}; String数组初始化区别 首先应该明白java数组里面存的是对象的引用,所以必须初始化才能用; String[] str = {"1","2","3"}与String[] str = newString[]{"1","2","3"}在内存里有什么区别? 编译执行结果没有任何区别。更不可能像有些人想当然说的在栈上分配空间,Java的对象都是在堆上分配空间的。 这里的区别仅仅是代码书写上的: String[] str = {"1","2","3"}; 这种形式叫数组初始化式(ArrayInitializer),只能用在声明同时赋值的情况下。 而 String[] str = new String[]{"1","2","3"}是一般形式的赋值,=号的右边叫数组字面量(ArrayLiteral),数组字面量可以用在任何需要一个数组的地方(类型兼容的情况下)。如: String[] str = {"1","2","3"}; // 正确的 String[] str = new String[]{"1","2","3"} // 也是正确的 而 String[] str; str = {"1","2","3"}; // 编译错误 因为数组初始化式只能用于声明同时赋值的情况下。 改为: String[] str; str = new String[] {"1","2","3"}; // 正确了 又如: void f(String[] str) { } f({"1","2","3"}); // 编译错误 正确的应该是: f(new String[] {"1","2","3"}); 还可以 String s=new String[30]; 如果没有显式赋值,则系统自动赋默认值null。 java静态数组与动态数组 java数组的定义与使用 Java数组是在Java编程中经常使用的一个类,下面是对Java数组的使用说明。 String两种初始化方式 1 . String str1= “abc”;//String类特有的创建字符对象的方式,更高效 在字符串缓冲区中检测”abc”是否存在 2 . String str1= new String( “abc”); //构造函数初始化
String对象是不可变的,它的内容不能改变,而在程序中字符串频繁使用,为了提高效率,对具有相同字符串序列的字符串直接量使用同一个实例,这样的实例被称之为限定的(interned) 比较两种创建方式,第一种更高效,只创建了一个对象,第二种创建了两个对象。 创建数组: //一维数组 String数组初始化区别: String[] str = {"1","2","3"}与String[] str = new String[]{"1","2","3"}在内存里有什么区别? 改为: 注意:初始化数组的时候定义为String[] str = new String[]{},如此定义相当于创建了创建一个长度为0的String(字符串)型的一维数组。在后期为其赋值的时候str[0]="A",就会抛出异常。 下面是stackoverflow中关于数组方法的相关问题中,获得最多票数的12个数组操作方法。 1. 声明一个数组 Java代码
2. 输出一个数组 Java代码
3. 从一个数组创建数组列表 Java代码
4. 检查一个数组是否包含某个值 Java代码
5. 连接两个数组 Java代码
6. 声明一个内联数组(Array inline) Java代码
7. 把提供的数组元素放入一个字符串 Java代码
8. 将一个数组列表转换为数组 Java代码
9. 将一个数组转换为集(set) Java代码
10. 逆向一个数组 Java代码
11. 移除数组中的元素 Java代码
12. 将整数转换为字节数组 Java代码
Java字符串 Java字符串类型为String类,下面介绍如何操作字符串。 1、字符串连接 字符串连接使用“+”符号,如下例子: String s = new String("Hello"); String s2 = new String("World"); System.out.println(s + " " + s2); // Hello World 2、获取字符串长度 获取字符串长度使用str.length(),如下例子: String s3 = new String("Hello Java"); System.out.println(s3.length()); // 10 3、获取指定字符串的索引 获取指定字符串的索引使用str.indexOf(substr)、str.lastIndexOf(substr),如下例子: String s4 = new String("how are you"); System.out.println(s4.indexOf("o")); // 1 从头开始查找 System.out.println(s4.lastIndexOf("o")); // 9 从尾开始查找 4、获取指定索引的字符 获取指定索引的字符使用str.charAt(index),如下例子: String s5 = new String("Hello Java"); System.out.println(s5.charAt(4)); // o 5、去除字符串中的空格 去除字符串中的空格有多种方法,使用str.trim()或str.replaceAll(regex, replacement),也可以借用StringTokenizer类对字符串使用空格进行分隔,使用前需要import包java.util.StringTokenizer,如下例子: String s6 = new String(" Hello Java "); String s7 = s6.trim(); // 去除字符串开始、结尾处的空格 String s8 = s6.replaceAll(" ", ""); // 替换字符串中的全部空格 StringTokenizer st = new StringTokenizer(s6, " "); // 使用空格分隔字符串 StringBuffer sb = new StringBuffer(); while (st.hasMoreTokens()) { sb.append(st.nextToken()); } System.out.println("\"" + s6 + "\"" + "length = " + s6.length()); // " Hello Java "length = 14 System.out.println("\"" + s7 + "\"" + "length = " + s7.length()); // "Hello Java"length = 10 System.out.println("\"" + s8 + "\"" + "length = " + s8.length()); // "HelloJava"length = 9 System.out.println("\"" + sb.toString() + "\"" + "length = " + sb.toString().length()); // "HelloJava"length = 9 6、替换字符串 替换字符串可以替换全部子串,也可以替换第一个子串,如下例子: String sr = new String("abc abd bcd"); String sr2 = sr.replace("ab", "xx"); // 替换全部子串 String sr3 = sr.replaceFirst("ab", "xx"); // 替换第一个字串 System.out.println(sr2); // "xxc xxd bcd" System.out.println(sr3); // "xxc adb bcd" 7、字符串判等 字符串判等有多种情况,例如字符串内容判等、是否忽略大小写、内存地址判等、字符串开始或结尾处判断等,如下例子: String se = new String("Summer is so Hot"); String se1 = new String("Summer is so Hot"); String se2 = new String("summer is so hot"); String se3 = se; System.out.println(se == se1); // false 比较内存而非字符串内容 System.out.println(se == se3); // true System.out.println(se.equals(se1)); // true 比较字符串内容 System.out.println(se.equals(se2)); // false System.out.println(se.equalsIgnoreCase(se2)); // true 忽略大小写 System.out.println(se2.startsWith("summer")); // true 字符串开始 System.out.println(se2.endsWith("cold")); // false 字符串结尾 8、字符串大小写转换 字符串大小写转换如下例子: String sc = new String("hello WORLD"); String scl = sc.toLowerCase(); // hello world 转换为小写 String scu = sc.toUpperCase(); // HELLO WORLD 转换为大写 System.out.println(scl + " " + scu); 9、字符串分隔 字符串分隔如下例子: String ss = new String("abc,def,g,h"); String[] ss2 = ss.split(","); // 以逗号分隔 for (String x: ss2) { System.out.print(x + "\t"); // abc def g h } 10、格式化字符串 字符串格式化有多种形式,如日期格式化、时间格式化、进制转换等,Date类的使用需要import包java.util.Date,如下例子: Date d = new Date(); System.out.println(d); // Wed Jul 22 16:00:36 CST 2015 默认格式 System.out.println(String.format("%tm", d)); // 07 两位数月份 System.out.println(String.format("%tH", d)); // 16 两位24小时制 System.out.println(String.format("%x", 256)); // 100 十六进制 11、String、StringBuffer、StringBuilder类比较 String:字符串常量,不可变对象,变量内容改变时实际上是生成了一个新的String对象,当多次、频繁改变变量内容时,会对系统性能产生影响,特别是由此导致GC开始工作时,程序速度就会变的很慢。 StringBuffer:字符串变量,线程安全,变量内容改变时其实是对同一个对象进行操作,效率比String类型高。 StringBuilder:字符串变量,与StringBuffer兼容,却是非线程安全的,如果是单线程,优先使用StringBuilder,它比StringBuffer要快。 |