String类、正则表达式
一、String类
String使用非常频繁,用来描述一个字符串.String中实现了很多
对字符串方便的操作方法.
String内部使用char[]实现字符串的数据保存
字符串的"字面量(直接量)"也是String类型的实例
String对象是不变对象.对象创建后内容不可更改,这样的规则使
得String看起来更像简单类型.
String中的每个字符都是有索引值的,第一个字符的索引值为0,
依次类推
String API
charAt() :返回指定索引处的char值
length() :返回字符串长度
trim() :返回去掉字符串两边的空白(不是空格)
的字符串
toLowerCase() :将字符串中的英文全小写
toUpperCase() :将字符串中的英文全大写
indexOf() :返回给定字符在当前字符串中第一次出
现的索引值
lastIndexOf() :返回给定字符在当前字符串中最后一次
出现的索引值
endsWith() :判断当前字符串是否以给定字符串结尾
startsWith() :判断当前字符串是否以给定字符串开始
substring() :截取字符串
toCharArray() :将字符串转换为字符数组
静态字符串
java在编译期间(javac)凡是遇到"字面量"与常量间的运算,都会
先运算出结果,在进行编译工作
例如:
源代码中:
String name = "abc" + "def";
编译期间:
String name = "abcdef";
运行期间当字符串池中有String"字面量"时,java会直接引用,若
没有才会创建对象
String a = "abc";
此时,字面量"abc"在String池中不存在,那么java创建一个
String对象保存"abc",并放入String池中.
String b = "abc";
当执行到这句话时,"abc"在String池中已经存在,那么java
会让b直接引用之前创建的字符串对象"abc",而不重复创建
对象.尽可能优化字符串对象的重用(因为字符串是不变对象
所以重用不会带来问题)
因为这个特性,所以a==b为true是存在的.
二、正则表达式:
正则表达式的作用:约束字符串的格式
字符集:
[] :方括号表示其中的内容任选其一,代表一个字符
[1234] 1,2,3,4任选其一
() :表示一组内容,圆括号中可以使用"|"符号
| :逻辑或关系
^ :非,除了
[^12] 除了1或2的其他字符
- :范围,范围应从小到大
[0-9]表示此字符只能是数字
[a-f]表示此字符只能是a,b,c,d,e,f之一
[0-6a-fA-F] 0123456abcdefABCDEF
{n,m} :修饰前一个字符,表示其出现n-m次.n应小于m
{n} :修饰前一个字符,表示其出现n次
{n,} :修饰前一个字符,表示其出现n次以上
0[xX][0-9a-fA-F]{1,8}
0x7fffffff int最大值
预定义字符集:
\d :表示一个数字.与[0-9]意思一致
. :表示任意字符
\w :表示单词字符.[0-9a-zA-Z_] 包含个下划线
\s :表示空白: \t \n \r \b \p
\D :表示非数字
\W :非单词字符
\S :非空白
? :修饰前一个字符出现0-1次. {0,1}
+ :修饰前一个字符出现1次以上.{1,}
* :修饰前一个字符出现任意次. {0,}
注意:"."在正则表达式中代表任意字符,若想表示"."的原意,我们
需要使用"\."表示
网页url格式:
[w]{3}\.[0-9a-zA-Z]+\.com
通过上面的正则表达式,是否能描述
wwww.sohu.com
可以的.原因在于,正则表示式搜索整个字符串,判断部分内容满足
格式就可以.
为了解决让正则表达式全字符匹配.我们需要告诉正则表达式需要
从字符串的开始到结尾^ $
^[w]{3}\.[0-9a-zA-Z]+\.com$
常用的正则表达式:
邮编 : ^[0-9][0-9][0-9][0-9][0-9][0-9]$
邮编只有6位数字
^[0-9]{6}$
^\d{6}$
用户名: 单词字符出现8-10次
^\w{8,10}$
^[0-9a-zA-Z_]{8,10}$
手机号码: +86 15811111111
0086 15811111111
15811111111
^(\+86|0086)?\s?\d{11}$
身份证号: 15位或18位
18位最后一位有可能是x(大小写均可)
^\d{15}(\d{2}[0-9xX])?$
一个坐标: 18 , 789
18 789
^\d+(\s*,\s*|\s+)\d+$
正确答案: ABCD A,B A B C A , B
^A?(\s*|\s*,\s*)?B?(\s*|\s*,\s*)?C?(\s*|\s*,\s*)?D?$
日期格式: 2012-08-17
^\d{4}-\d{2}-\d{2}$
^\d{4}(-\d{2}){2}$
2012-99-99
email : ^\w+@\w+(\.(com|cn|net))+$
=======================================================
String中对正则表达式的支持
String的API中有几个方法支持正则表达式
matches() 匹配正则表达式
slipt() 根据正则表达式拆分字符串
replaceAll() 将满足正则表达式的部分已给定字符串替换
缓冲字符串StringBuffer和StringBuilder
String:char[] + 操作 char[]为不变对象
优点:使用起来更自然,贴近基本类型
缺点:字符串拼接时资源消耗大!处理速度慢(要创建很多对象)
在进行大规模频繁修改字符串时,String的缺点明显!
这时应使用缓冲字符串
StringBuffer:char[] + 操作 char[]可变
缓冲字符串中的char[]数组使用一种变长算法自动扩容当前
char[]长度.以满足其中字符串数据的拼接与修改.
StringBuffer的API:
insert() :向当前字符串中指定索引处插入字符串
append() :在当前字符串末尾追加字符串
delete() :删除字符串中的部分内容
toString() :将当前缓冲字符串转换为String
StringBuilder:和StringBuffer几乎一样,区别在于
StringBuilder:线程非安全
StringBuffer :线程安全
String的拼接优化:
String s = s1 + s2;
java实际运行时优化为
String s = new StringBuilder(s1).append(s2).toString();
此处为转载的网址:
String类、正则表达式的更多相关文章
- Java学习笔记 02 String类、StringBuilder类、字符串格式化和正则表达式
一.String类一般字符串 声明字符串 >>String str 创建字符串 >>String(char a[])方法用于将一个字符数组创建为String对象 >> ...
- Java学习笔记21(String类补充:正则表达式)
正如python的re模块,不过Java和Python的正则表达式有一些区别,这里做简单介绍,具体的细节可以参考网上其他的文章: 功能:可以用于检验一个字符串,比如验证用户名,验证密码格式,验证是否是 ...
- java常用类与包装类--常用类正则表达式 String正则方法+Matcher+Pattern
0.java中的正则 java 中的正则总共涉及三个类(或者说1个String类和一个regex包) java.lang.String java.util. Matcher java.util.Pat ...
- Java—API/Obiect类的equals toString方法/String类/StringBuffer类/正则表达式
API Java 的API(API: Application(应用) Programming(程序) Interface(接口)) 就是JDK中提供给我们使用的类,这些类将底层的代码实现封装了起来 ...
- C#笔记2__Char类、String类、StringBuilder类 / 正则表达式 /
Char类 String类 字符串的格式化:String类的Format方法 StringBuilder类 以上:百度 or 查手册.....
- String类常用方法
1.String类的特点,字符串一旦被初始化就不会被改变. 2.String对象定义的两种方式 ①String s = "affdf";这种定义方式是在字符串常量池中创建一个Str ...
- String类replaceAll方法正则替换深入分析
作者网址: https://my.oschina.net/shipley/blog/98973 背景: 前几天有人发了一个关于下面问题的贴,对这个有点好奇,故花时间做了点研究. ...
- String类和StringBuffer类的方法
一.String类的方法 public char charAt(int index) 返回字符串index个字符 public int length() 返回字符串长 ...
- java.lang.String 类的所有方法
java.lang.String 类的所有方法 方法摘要 char charAt(int index) 返回指定索引处的 char 值. int codePointAt(int index) 返回指定 ...
随机推荐
- iOS Storyboard 的基本用法
(Storyboard)是一个能够节省你很多设计手机App界面时间的新特性,下面,为了简明的说明Storyboard的效果,我贴上本教程所完成的Storyboard的截图: 现 在,你就可以清楚的看 ...
- Topcoder SRM 584 DIV1 600
思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...
- mongoose
var mongoose = require('mongoose');mongoose.connect('mongodb://localhost/test'); var Cat = mongoose. ...
- Java对象的序列化和反序列化实践
2013-12-20 14:58 对象序列化的目标是将对象保存在磁盘中,或者允许在网络中直接传输对象.对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存 ...
- AIX查看内存卡槽
1.lscfg -vp|grep Processor 2.lscfg -vp|grep -p Memory
- AbstractMap学习记录
package java.util;import java.util.Map.Entry; /** * This class provides a skeletal implementation of ...
- 应用程序池“Classic .NET AppPool”将被自动禁用
原文:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=28972779&id=3868008 服务器 Server 20 ...
- Linux Lab
ssh vi /etc/apt/sources.list su ssh username@ipaddress eg : ssh root@172.16.247.143 实验一 fdisk /dev/s ...
- 网易云课堂 OCP
数据库DBA任务: 管理数据库可用性 设计并创建数据库 管理物理结构 管理基于设计的存储 管理安全性 网络管理 备份与恢复 数据库调整与优化 关系型数据库(RDBMS) 多个表数据之间存在着关系 关系 ...
- vector用法总结(转载)
一.vector的基本概念 vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值.和string对象一样,标准库负责管理存储元素的相关内存.我们把vector称为容器,是因为它可以包 ...