1、不可变的String

  String对象是不可变的。String类中的每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改修改后的字符串内容。

public class Tree1 {
public static String upcase(String s) {
return s.toUpperCase();
}
public static void main(String[] args) {
String q = "how are you";
System.out.println(q);
String qq = upcase(q);
System.out.println(q);
System.out.println(qq);
}
}

输出为:

how are you
how are you
HOW ARE YOU

upcase返回的是toUpperCase()方法的结果,这个方法是使String对象的字母全部大写,然后返回一个String对象。

这里的q并没有发生变化,所以String对象是不可变的可以理解为c语言中的传值调用。

2、重载“+”与StringBuider

  “+”字符串是用来连接String的。

public class Tree1 {

    public static void main(String[] args) {
String q = "how are you" + "233" + "what?";
System.out.println(q);
}
}

输出就是

how are you233what?

其实这里的 +的工作原理并不是使用的String的append方法实现的,编译器创建了一个StringBuilder,用来构造最终的String对象。。

3、正则表达式

  一般来说,正则表达式就是以某种方式来描述字符串,因此你可以说:“如果一个字符串含有这些东西,那么它就是我正在找的东西”,例如想要找一个数字,它可能负号在最前面,那你就写一个负号加上一个问好,就像

  -?

  要描述一个整数,有一位或者多位阿拉伯数字,在正则表达式中用\d表示一位数字

  Java对反斜线有和其他语言不一样的处理,比如其他语音中,\\表示想要插入一个普通的反斜线\,而在Java中就是想要加入一个正则表达式的反斜线,所以想要插入一个字面上的 普通的反斜线应该是\\\\,普通的一位数字就是\\d,不过换行和制表符就只需要单反斜线:\n\t

  要表示“一个或多个之前的表达式”,应该使用+,所以,如果想要表示“可能有一个负号,后面跟着一位或者多位数字”可以这样:
  -?\\d+

  

public class Tree1 {

    public static void main(String[] args) {
System.out.println("-122".matches("-?\\d+"));
System.out.println("122".matches("-?\\d+"));
System.out.println("".matches("-?\\d+"));
System.out.println("+911".matches("(-|\\+)?\\d+"));
}
}

输出:

true
true
false
true

前两个输出就不用说了,第三个什么都没有,所以这个+就表示 至少要有一个数字。

第四个的  (-|\\+)?\\d+

?\\d+ 这里的意思是至少也要一个数字,|表示或操作,-|\\+表示 一个加号或者负号,(-|\\+)?这个表示可能有一个加号或者负号,总的就是可能有一个加号或者负号再或者都没有的数字。

split()方法: “将字符串从正则表达式匹配的地方切掉”

public class Tree1 {

    public static void main(String[] args) {
String s = "233-2";
System.out.println(Arrays.toString(s.split("-\\d+")));
String t = "what are you name";
System.out.println(Arrays.toString(t.split("\\w")));
System.out.println(Arrays.toString(t.split(" ")));
System.out.println(Arrays.toString(t.split("a\\w\\w")));
}
}

输出:

[233]
[, , , , , , , , , , ]
[what, are, you, name]
[what , you n]

\w表示一个单词字符

替换:

public class Tree1 {

    public static void main(String[] args) {
String s = "233-2";
System.out.println(s.replaceFirst("2", "q"));
System.out.println(s.replaceAll("2", "q"));
System.out.println(s.replaceAll("2|3", "q"));
System.out.println(s.replaceAll("2|3|-", "q"));
System.out.println(s.replaceAll("-\\d", "q"));
System.out.println(s.replaceAll("\\d+-\\d", "q"));
}
}

输出:

q33-2
q33-q
qqq-q
qqqqq
233q
q

replaceFirst()替换第一个,replaceAll()替换所有符合的,而且可以替换多个

具体可以看这个 http://www.runoob.com/java/java-regular-expressions.html

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. 读取ClassPath下resource文件的正确姿势

    1.前言 为什么要写这篇文章?身为Java程序员你有没有过每次需要读取 ClassPath 下的资源文件的时候,都要去百度一下,然后看到下面的这种答案: Thread.currentThread(). ...

  2. 谈谈 c# 对象初始化问题

    C#对象初始化 之前在学习过程中只是知道该如何初始化对象,但是却不明白为何要这么做,不这么做有什么问题. 现在就针对我最近遇到的问题(定义了全局字节数组没有初始化,然后在多线程里头使用,然后就一直报n ...

  3. Java项目实例之---学生选课(面向对象复习)

    学生选课(面向对象复习) 设计一个学生选课的程序,分别有学生类(Student)和课程类(Course) 学生类的属性有:学号(String),姓名(String),性别(char),所选科目(Cou ...

  4. MYSQL Got error 28 from storage engine

    网络查找该异常信息,发现 Got error 28 from storage engine 查了一下,数据库文件所在的盘应该没事,应该是数据库用的临时目录空间不够 引用 磁盘临时空间不够导致. 解决办 ...

  5. linux修改时间显示格式

    1. 问题描述 Linux下经常使用 "ls - ll"命令查看文件夹或文件创建及权限信息,但是满屏的Mar .May.Jul有点小难受. 2. 解决方案 修改bash_profi ...

  6. 多线程总结-同步之ReentrantLock

    目录 1 ReentrantLock与synchronized对比 2.示例用法 2.1 基本用法 2.2 尝试锁 2.3 可打断 2.4 公平锁 1 ReentrantLock与synchroniz ...

  7. 9.22考试 crf的数数 题解

    这道题当时第一反应是线段树,但没有继续想,因为当时打完第一题打算这道题和第二道题并列做,打完第二道题状压后时间还有两个小时多,先打完暴力再说,打完之后又接着去想,然后想了5分多钟吧,扑街. 然后就发现 ...

  8. akka 集群分片

    akka 集群 Sharding分片 分片上下级结构 集群(多台节点机) —> 每台节点机(1个片区) —> 每个片区(多个分片) —> 每个分片(多个实体) 实体: 分片管理的 A ...

  9. SpringCloud解析之Zuul(二)

    本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. 在上一期的Spri ...

  10. 理解 Spring 定时任务的 fixedRate 和 fixedDelay 的区别

    用过 Spring 的 @EnableScheduling 的都知道,有三种方式,即 @Scheduled 注解的 fixedRate(fixedRateString), fixedDelay(fix ...