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. top命令输出详解

    前言 Linux下的top命令我相信大家都用过,自从我接触Linux以来就一直用top查看进程的CPU和MEM排行榜.但是top命令的其他输出结果我都没有了解,这些指标都代表什么呢,什么情况下需要关注 ...

  2. ffmpeg+nginx将rtsp转为rtmp

    一.安装ffmpeg 1.http://ffmpeg.org/download.html下载地址,选择合适的操作系统版本下载,因为我的操作系统是centos7,所以下面的安装都是命令都是针对cento ...

  3. websocket实现群聊和单聊(转)

    昨日内容回顾 1.Flask路由 1.endpoint="user" # 反向url地址 2.url_address = url_for("user") 3.m ...

  4. c# override用法

    要扩展或修改继承的方法.属性.索引器或事件的抽象实现或虚实现,必须使用 override 修饰符. 在此例中,类 Square 必须提供 Area 的重写实现,因为 Area 是从抽象的 Shapes ...

  5. android_SurfaceView 画图

    有这样一种view类,可以让人在其上面画动画,画图片,它的全名叫做surfaceview.名称就包含两层意思,一层是surface,一层是view.前一层提供一个面可以让人画画,后一层是个view,可 ...

  6. 【基本数据结构】并查集-C++

    并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.这一类问题近几年来反复出 ...

  7. 【NOIP2017】图书管理员-C++

    描述 图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个 正整数. 每位借书的读者手中有一个需求码,这个需求码也是一个正整数.如果一本书的图 书编码恰好以读者的需求码结尾,那么这 ...

  8. <float.h>中DBL_TRUE_MIN的定义和作用

    搬运自己2016年11月22日于SegmentFault发表的文章.链接:https://segmentfault.com/a/1190000007565915 在学习C Prime Plus的过程中 ...

  9. Orleans 知多少 | 2. 核心概念一览

    Orleans 术语解读 上面这张图中包含了Orleans中的几个核心概念: Grain Silo Orleans Cluster Orleans Client 从这张图,我们应该能理清他们之间的关系 ...

  10. STM32-I2C_CheckEvent-标志位自动清除理解

    STM32里I2C_CheckEvent函数我们应该是相当熟悉了,在每次发送数据后我们都需要检验相应的EVx(x = 0,1,2,,,)事件是否有发送. 函数定义如下: ErrorStatus I2C ...