• 字符串

  在java中,字符串被作为String类型的对象处理。String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。

  创建String对象的方法:

String s1 = "java";
String s2 = new String();
String s3 = new String("Java");
  1. Java字符串的不变性

  String对象创建后不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同。

  如果需要一个可以改变的字符串可以使用StringBuffer或者StringBuilder。

  每次 new 一个字符串就是产生一个新的对象,即便两个字符串的内容相同,使用 ”==” 比较时也为 ”false” ,如果只需比较内容是否相同,应使用 ”equals()” 方法。

  常量池在Java中是用于保存在编译期已确定的、已编译的class文件中的数据。

package cn.test;

public class Demo12 {
public static void main(String[] args) {
String s1 = "java";//先检查字符串常量池中是否有"java"字符串,如果有则直接指向,如果没有就在字符串常量池中添加"java"字符串并指向它,所以这种方式创建字符串时最多创建一个对象,或者不创建对象
String s2 = "java";//s2直接指向字符串常量池中的"java"
String s3 = new String("java");//在堆内存申请一块内存存储字符串"java",s3指向其内存块对象,同时检查字符串常量池中是否有"java"字符串,如果没有就添加字符串"java"到常量池中,所以new String()有可能创建两个对象
String s4 = new String("java");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s3 == s4);
s1 = "欢迎来到" + s1;
System.out.println(s1);
System.out.println(s3.equals(s4));
}
}

  执行结果:  

  true
  false
  false
  欢迎来到java
  true

  • String类常用的方法

  举例1:

String fileName = "HelloWorld.java";
String email = "xiaoli@163.com"; // 判断.java文件名是否正确:合法的文件名应该以.java结尾
int index = fileName.lastIndexOf('.');
String prefix = fileName.substring(index+1);
if ( index > 0 && prefix.equals("java")) {
System.out.println("Java文件名正确");
} else {
System.out.println("Java文件名无效");
} // 判断邮箱格式是否正确:合法的邮箱名中至少要包含"@", 并且"@"是在"."之前
int index2 = email.indexOf('@');
int index3 = email.indexOf('.');
if (index2 != -1 && index3 > index2) {
System.out.println("邮箱格式正确");
} else {
System.out.println("邮箱格式无效");
}

String str = "boo:and:foo";
  String[] arr = str.split(":");
  for (int i = 0; i < arr.length; i++)
  {
    System.out.print(arr[i]);
  }

  执行结果: 

  Java文件名正确
  邮箱格式正确
  booandfoo

  举例2:

String str = "abcd阿";
byte[] b = str.getBytes();
for (int j = 0; j < b.length; j++) {
System.out.print("[" + b[j] + "]");
}

  运行结果:

  [97][98][99][100][-80][-94]

  注:1 个字节等于 8 位, gbk 编码中 1 个汉字字符存储需要 2 个字节,1 个英文字符存储需要 1 个字节

  示例3:

String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";

// 出现次数
int num = 0; // 循环遍历每个字符,判断是否是字符 a ,如果是,累加次数
for ( int i = 0;i < s.length(); i++ )
{
// 获取每个字符,判断是否是字符a
if ( s.charAt(i) == 'a' ) {
// 累加统计次数
num++;
}
}
System.out.println("字符a出现的次数:" + num);

  运行结果:

  字符a出现的次数:8

  • StringBuilder类

  String类具有可变性,频繁操作字符串时会产生很多临时变量,使用StringBuilder或StringBuffer就可以避免这个问题。它们基本相似,不同之处是StringBuffer是线程安全的,所以性能略高。因此,一般情况下创建一个内容可变的字符串对象,优先使用StringBuilder类。

StringBuilder str2 = new StringBuilder("java");

  StringBuilder类的常用方法:

  注:String str = "a" + s; 其效率与 String str = new StringBuilder().append("a").append(s).toString();是一样的。

  关于‘+’的原理,参考:http://blog.csdn.net/zengshunyao/article/details/40023577

Java—字符串的更多相关文章

  1. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  2. (转)Java字符串

    转自:http://blog.sina.com.cn/s/blog_899678b90101brz0.html 创建字符串有两种方式:两种内存区域(字符串池,堆)1," " 引号创 ...

  3. Java字符串split函数的注意事项

    Java字符串的split方法可以分割字符串,但和其他语言不太一样,split方法的参数不是单个字符,而是正则表达式,如果输入了竖线(|)这样的字符作为分割字符串,会出现意想不到的结果, 如, Str ...

  4. 关于java字符串编译优化问题

    情景一:不好的字符串拼接习惯    起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因 ...

  5. Java字符串排列算法

    Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...

  6. Java字符串转换

    public class StringConvertToInt{ public static void main(String[] args) { String a ="12a34bW()5 ...

  7. Java字符串null相加

    Java字符串null相加 最近和同事讨论了下面的一段代码: String a = null; a += a; System.out.println(a); 运行结果: nullnull 本着学习的态 ...

  8. JAVA字符串格式化String.format()的使用

    JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...

  9. Java字符串的10大热点问题,你都懂吗?

    转自 威哥干JAVA http://www.codingke.com 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1.如何比较字符 ...

  10. java 字符串为空问题

    java 字符串为空问题 String testStr = null; System.out.println(testStr); if (testStr == null) { System.out.p ...

随机推荐

  1. PAT天梯赛 L1-049 天梯赛座位分配

    题目链接:点击打开链接 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] ...

  2. github的使用 sourceTree

    http://www.cnblogs.com/Jenaral/p/5655958.html

  3. 《Qt 学习之路 2》目录

    <Qt 学习之路 2>目录 <Qt 学习之路 2>目录  豆子  2012年8月23日  Qt 学习之路 2  177条评论 <Qt 学习之路 2>目录 序 Qt ...

  4. java 中 静态泛型方法书写

    public class SpringBean { /** * */ public static <T> T getBean(Class<T> clazz,String nam ...

  5. 09-排序2 Insert or Merge (25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  6. 经典SQL行列转换

    -- http://www.programbbs.com/doc/4885.htm /* 标题:普通行列转换(version 2.0) 说明:普通行列转换(version 1.0)仅针对sql ser ...

  7. 问题:git处理中文名称时候显示为编码形式(已解决)

    问题描述: Untracked files: (use "git add <file>..." to include in what will be committed ...

  8. 第十一章:DOM扩展

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. java——调用一个静态方法的时候有没有执行这个类的构造方法,以及这个类中的静态常量?

    尝试一下: public class Try { final static int a = 1; public Try() { System.out.print("构造方法"); ...

  10. my.答题

    20170821增加: http://www.119you.com/mhxy/yxgl/738653.shtml 1.三界奇缘 http://my.netease.com/forum.php?mod= ...