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 ...
随机推荐
- easyui close的最大化的dialog 切换 tab 再次出现
今天发现一个神奇的bug,easyui中的dialog在经历了d.panel('close');之后,当前的tab仍然未关闭,切换了另一tab,然后回去刚才的tab,发现已经close的dialog又 ...
- 自我救赎 → 利用 IDEA 和 Spring Boot 搭建 SSM
前言 开心一刻 儿子读高中放学回来了,一向不管他学习的我突然来了兴趣,想看看他的学习他的状况,抄起他的数学习题看了起来,当看到 1 x 2 x 3 x 4 x 5 x 6 x 7 x 8 x 9 x ...
- android_layout_relativelayout(一)
android的相对布局relativelayout也是一个值得研究的部分.先归纳下最近的几个心得. 相对布局中,xml文件第一个控件总是在屏幕的左上角为它的位置,别管你手机是竖着的还是横着的. 从第 ...
- 深入理解Java虚拟机一 阅读笔记
xl_echo编辑整理.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! --- > 以下内容摘抄自 ...
- Sublime Text 3 实现C++代码的编译和运行
在数据结构代码的编写中,我选用了优秀的编辑器 Sublime Text 3,但是在实现C++代码的编译和运行上费了一番周折,接下来我贴出 C++ 编译系统的代码,供各位参考. 编译后是在弹出的CMD命 ...
- 软件测试必须掌握的linux命令大全
测试工程师的四大基础技能:数据库.linux.网络协议.测试工具,不管是刚入门还是已经工作多年,这几个方向都是要掌握的.今天我们再讲一下测试工程师必须要掌握的linux命令. 测试工程师需要掌握lin ...
- android开发--使用webView加载tel协议不会打开拨号盘解决
在加载url之前进行判断,url是否是tel协议开头,然后进行加载,即可打开拨号盘 mWebView.setWebViewClient(new WebViewClient() { @Override ...
- [leetcode] 64. Minimum Path Sum (medium)
原题 简单动态规划 重点是:grid[i][j] += min(grid[i][j - 1], grid[i - 1][j]); class Solution { public: int minPat ...
- 如何利用Azure Automation以及Tag自动开关VM
这是本博客第一篇技术相关的小贴士,在这里我不会详细介绍所涉及的技术组件的具体使用细节,因为我相信这些大家都可以通过官方文档了解到.如果你是一个看了官方文档依然一脸茫然的IT小白,个人建议是先从基础重新 ...
- 二十、Sql Server 保留几位小数的两种做法
问题: 数据库里的 float momey 类型,都会精确到多位小数.但有时候 我们不需要那么精确,例如,只精确到两位有效数字. 解决: 1. 使用 Round() 函数,如 Round(@num,2 ...