Java——字符串
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——字符串的更多相关文章
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- (转)Java字符串
转自:http://blog.sina.com.cn/s/blog_899678b90101brz0.html 创建字符串有两种方式:两种内存区域(字符串池,堆)1," " 引号创 ...
- Java字符串split函数的注意事项
Java字符串的split方法可以分割字符串,但和其他语言不太一样,split方法的参数不是单个字符,而是正则表达式,如果输入了竖线(|)这样的字符作为分割字符串,会出现意想不到的结果, 如, Str ...
- 关于java字符串编译优化问题
情景一:不好的字符串拼接习惯 起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因 ...
- Java字符串排列算法
Java字符串排列算法 题目:现有ABCDE 5个球 构成的排列组合 可重复抽取 最多取到16个 共有多少种组合方式? 比如:取1个球可以构成的组合有 A B C D E 共5种,取2个球可以构成的组 ...
- Java字符串转换
public class StringConvertToInt{ public static void main(String[] args) { String a ="12a34bW()5 ...
- Java字符串null相加
Java字符串null相加 最近和同事讨论了下面的一段代码: String a = null; a += a; System.out.println(a); 运行结果: nullnull 本着学习的态 ...
- JAVA字符串格式化String.format()的使用
JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...
- Java字符串的10大热点问题,你都懂吗?
转自 威哥干JAVA http://www.codingke.com 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1.如何比较字符 ...
- java 字符串为空问题
java 字符串为空问题 String testStr = null; System.out.println(testStr); if (testStr == null) { System.out.p ...
随机推荐
- C语言学习书籍推荐《学习使用C指针(影印版)(英文本)》下载
<学习使用C指针(影印版)(英文本)>作者通过<学习使用C指针(影印版)(英文本)>中的内存模型为你展示了如何在数组.字符串.结构和函数中使用指针.虽然难以掌握,但是指针为C语 ...
- QUIC
QUIC(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议.在2016年11月国际互联网工程任务组(IETF)召开了第一次QUIC工作组 ...
- springboot与springcloud的关系
1 . 问题描述 随着springboot.springcloud的不断迭代升级,开发效率不断提升,越来越多的开发团队加入到spring的大军中,今天用通俗的语言,介绍下什么是springboot,s ...
- js继承的6种方式
想要继承,就必须要提供个父类(继承谁,提供继承的属性) 一.原型链继承 重点:让新实例的原型等于父类的实例. 特点:1.实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性.(新 ...
- KVM :vnc 远程控制kvm创建虚拟机
一.vnc远程控制服务器 前期准备: 1.编辑/etc/hosts vi /etc/hosts 10.1.16.32 kvm 2.关闭防火墙 service iptables stop 3.关闭sel ...
- java.util.LinkedHashMap cannot be cast to
Jackson转换泛型List出现错误java.util.LinkedHashMap cannot be cast to com.xxx ObjectMapper mapper = new Objec ...
- Windows下ElasticSearch的Head安装及基本使用
前段时间,有一朋友咨询我,说es的head插件一直安装失败,为了给朋友解惑,自己百度博文并实践了一番,也的确踩了些坑,但我给爬了起来.今天就来分享下实践心得并跳过的坑. ElasticSearch 是 ...
- 小白开学Asp.Net Core《二》(补)
小白开学Asp.Net Core<二>(补) ——数据仓储层(Repositroy).服务层(Service) -------------------------------------- ...
- MySql(Linux)
百度云:链接:http://pan.baidu.com/s/1jHQtPau 密码:elr8 官方下载网址:http://dev.mysql.com/downloads/mysql/
- Android CHM文件阅读器
CHM格式是1998年微软推出的基于HTML文件特性的帮助文件系统.以替代早先的winHelp帮助系统,它也是一种超文本标识语言.在Windows 98中把CHM类型文件称作“已编译的HTML帮助文件 ...