• 字符串

  在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. 序列终结者 BZOJ 1251 Splay

    题目背景 网上有许多题,就是给定一个序列,要你支持几种操作:A.B.C.D.一看另一道题,又是一个序列要支持几种操作:D.C.B.A.尤其是我们这里的某人,出模拟试题,居然还出了一道这样的,真是没技术 ...

  2. kuangbin专题七 HDU1166 敌兵布阵 (线段树或树状数组)

    C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...

  3. ssh证书生成与配置

    cd /usr/local/nginx/conf openssl genrsa -des3 - //key文件为私钥 openssl rsa -in tmp.key -out aminglinux.k ...

  4. 「洛谷5017」「NOIP2018」摆渡车【DP,经典好题】

    前言 在考场被这个题搞自闭了,那个时候自己是真的太菜了.qwq 现在水平稍微高了一点,就过来切一下这一道\(DP\)经典好题. 附加一个题目链接:[洛谷] 正文 虽然题目非常的简短,但是解法有很多. ...

  5. git commit 操作

    查看提交历史 然后在此项目中运行 git log,应该会看到下面的输出:   合并commit 信息 我们需要将 2dfbc7e8 和 c4e858b5 合并成一个 commit,那么我们输入如下命令 ...

  6. Python练习六十:网页分析,找出里面的正文与链接

    网页分析,找出里面的正文与链接 代码如下: from urllib import request from bs4 import BeautifulSoup request = request.url ...

  7. thinkPHP 全局函数

    M函数 TP的Model父类,封装的功能比较多,增删改查操作都具备.一些表,比如留言表,comment class CommentModel extends Model { } M('comment' ...

  8. linux查看当前用户登陆信息

    @(Linux基础)[linux查看当前用户登陆信息] linux查看当前用户登陆信息 作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正 ...

  9. http 协议的简单学习 虽然有点老但是 还不错

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  10. 使用Xshell连接服务器

    转载原地址:http://www.server110.com/linux/201308/830.html 1)关于Xshell 网上更多的资料里提到的SSH客户端是putty,因为简单.开源.免费.但 ...