JAVA作业—字符串操作
------------恢复内容开始------------
------------恢复内容开始------------
------------恢复内容开始------------
------------恢复内容开始------------
JAVA作业—字符串操作
一,不同字符串的比较
| 字符串操作 | 数据类型 | 可变性 | 内存分配 | 线程安全性 | 性能 |
|---|---|---|---|---|---|
| C/C++中的char* | 字符指针 | 可变 | 系统处理 | 未知 | 高效 |
| C/C++中的String封装类 | 一个类 | 可变 | 手动释放 | 并发的读操作是线程答安全的。 | 较char指针低效 |
| Java中的String 类 | char[]的形式保存的字符串 | 不可变 | 系统处理 | 安全 | 对String类型的字符床做修改操作都是相当于重新创建对象。StringBuilder > StringBuffer > String。 |
| Java中的StringBuilder类 | char[]的形式保存的字符串 | 可变 | 系统处理 | 不安全 | 操作都是对同一个对象做操作,StringBuilder因为没有使用使用synchronized关键字修饰,所以性能更高。StringBuilder > StringBuffer > String。 |
| Java中的StringBuffer类 | char[]的形式保存的字符串 | 可变 | 系统处理 | 安全 | 操作都是对同一个对象做操作,StringBuffer中的方法大部分都使用synchronized关键字修饰。StringBuilder > StringBuffer > String。 |
二,字符串操作性能比较
测试代码
`package Stringtest;
/**
* @author 李玉
* */
public class Test {
private static final int N=100000;
public static void main(String[] args) {
StringTest();
StringBufferTest();
StringBuilderTest();
} public static void StringTest(){
long begintime=System.currentTimeMillis();
String str="";
for (int i=0;i<N;i++){
str+=i;
}
long endtime =System.currentTimeMillis();
System.out.println("StringTime is:"+(endtime-begintime)+"ms");
} public static void StringBufferTest(){
long begintime = System.currentTimeMillis();
StringBuffer str= new StringBuffer();
for(int i = 0; i< N; i++){
str.append(i);
}
long endTime = System.currentTimeMillis();
System.out.println("StringBufferTime is: "+ (endTime - begintime)+"ms");
}
public static void StringBuilderTest(){
long beginTime = System.currentTimeMillis();
StringBuilder str = new StringBuilder();
for(int i = 0; i< N; i++){
str.append(i);
} long endTime = System.currentTimeMillis();
System.out.println("StringBuilderTime is:"+ (endTime - beginTime)+"ms");
}
}`
运行结果

三,正则表达式匹配
测试代码
package Stringtest;import com.sun.org.apache.xerces.internal.impl.xpath.regex.Match;
import java.util.regex.Matcher;import java.util.regex.Pattern;
public class RegularExpressionTest {
public static void main(String[] args) {
//邮政编码
String postcode="^(?:13\\d|15\\d|18\\d)\\d{5}(\\d{3}|\\*{3})$";
//手机号
String phone="^[1-9]\\d{5}$";
//区号-座机号码
String areacode= "\\d{3}-\\d{8}|\\d{4}-\\d{7}";
//测试用例
String pc="236000";
String p="18226290524";
String ac="010-123456789";
System.out.println(match(postcode,pc));
System.out.println(match(phone,pc));
System.out.println(match(areacode,pc));
System.out.println(match(postcode,p));
System.out.println(match(phone,p));
System.out.println(match(areacode,p));
System.out.println(match(postcode,ac));
System.out.println(match(phone,ac));
System.out.println(match(areacode,ac));
}
static boolean match(String str,String Ex){
Pattern p=Pattern.compile(str);
Matcher m=p.matcher(Ex);
while (m.find()){
return true;
}
return false; }
}
运行结果

四,个人小结
java中操作字符串的类,我知道的有三个类,分别是String,StringBuffer和StringBuilder.这三个类都是以char[]的形式保存的字符串,但是String类型的字符串是不可变的,对String类型的字符床做修改操作都是相当于重新创建对象.而对StringBuffer和StringBuilder进行增删操作都是对同一个对象做操作.StringBuffer中的方法大部分都使用synchronized关键字修饰,所以StringBuffer是线程安全的,StringBuilder中的方法则没有,线程不安全,但是StringBuilder因为没有使用使用synchronized关键字修饰,所以性能更高,在单线程环境下我会选择使用StringBuilder,多线程环境下使用StringBuffer.如果生命的这个字符串几乎不做修改操作,那么我就直接使用String,因为不调用new关键字声明String类型的变量的话它不会在堆内存中创建对象,直接指向String的常量池,并且可以复用.效率更高。
资料来源
------------恢复内容结束------------
------------恢复内容结束------------
------------恢复内容结束------------
------------恢复内容结束------------
JAVA作业—字符串操作的更多相关文章
- Java的字符串操作
目录 Java的字符串操作 一.不同字符串操作的对比 1.1 C++中const修饰指针 const在星号的左边,是被指向的常量不可变 const在星号的右边,是指针的指向不可变 二. Java字符串 ...
- Java的字符串操作一些简单的思考
Java的字符串操作 1 .1不可变的String String对象事不可变的,String类中的每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符 ...
- java类库字符串操作
在java类库中,java给我们提供了字符串几个特别的操作,分别是String,Stringbuffer,Stringbuilder等.下面就对这几个类做一个简单的介绍.首先,我们先了解一下Strin ...
- Java Script 字符串操作
JS中常用几种字符串操作: big() small() bold() fontcolor() fontsize() italics() strike() link() charAt() charCod ...
- Java String 字符串操作小结
// 转载加编辑 -- 21 Apr 2014 1. Java字符串中子串的查找 Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现 ...
- 使用javap分析Java的字符串操作
我们看这样一行简单的字符串赋值操作的Java代码. String a = "i042416"; 使用命令行将包含了这行代码的Java类反编译查看其字节码: javap -v con ...
- 四:Java之字符串操作String、StringBuffer和StringBuilder
string是我们经经常使用到的一个类型,事实上有时候认为敲代码就是在重复的操作字符串,这是C的特点,在java中.jdk非常好的封装了关于字符串的操作.三个类String .StringBuffer ...
- Java基础(一)-- Java对字符串操作大全
一.Java字符串类基本概念 在JAVA语言中,字符串数据实际上由String类所实现的.Java字符串类分为两类:一类是在程序中不会被改变长度的不变字符串:二类是在程序中会被改变长度的可变字符串.J ...
- android TextView字体设置最少占多少行. 及其 Java String 字符串操作 . .
① 字体设置: 修改代码 : GridViewActivity.java priceTv为 TextView priceTv.setMaxLines(3); //当多与7个字fu的时候 , 其余字 ...
随机推荐
- DOM事件操作
DOM事件:对事件做出反应 当事件发生时,可以执行 JavaScript,比如:点击时 onClick="" 例:当用户点击时,会改变 <h1> 元素的内容: < ...
- Oracle Dataguard故障转移(failover)操作
注意:故障转移会破坏DG的主从关系,使其变为互不相关的2个数据库,谨慎使用. (一)故障转移操作流程图 (二)故障转移操作流程 备注:以下操作步骤与上面流程图步骤一一对应 STEP1:刷新所有未发送到 ...
- 进度条函数 -------ajax初试
做一个显示任务完成情况的进度条: <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- PHP boolval() 函数
boolval 函数用于获取变量的布尔值.高佣联盟 www.cgewang.com 版本要求:PHP 5 >= 5.5.0, PHP 7. 语法 boolean boolval ( mixed ...
- ElasticSearch 基本概念 and 索引操作 and 文档操作 and 批量操作 and 结构化查询 and 过滤查询
基本概念 索引: 类似于MySQL的表.索引的结构为全文搜索作准备,不存储原始的数据. 索引可以做分布式.每一个索引有一个或者多个分片 shard.每一个分片可以有多个副本 replica. 文档: ...
- ORACLE不完成恢复ORA-00392,ORA-00312,ORA-00349
背景: 进行测试库不完全恢复,log_file_name_convert没调整好.rac-asm至单实例-文件系统,recover完成后,mount状态的database 执行 alter data ...
- [vue] computed 和 method
计算属性 计算属性只有在它的相关依赖发生改变时才会重新取值 Method method每次渲染的时候都会被执行 举一个栗子 <template>...<div> <p& ...
- 付费?是不可能的!20行Python代码实现一款永久免费PDF编辑工具
PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献.文档…很多都是PDF格式.它以格式稳定的优势,使得我们在打印.分享.传输过程中能 ...
- hashCode竟然不是根据对象内存地址生成的?还对内存泄漏与偏向锁有影响?
起因 起因是群里的一位童鞋突然问了这么问题: 如果重写 equals 不重写 hashcode 会有什么影响? 这个问题从上午10:45 开始陆续讨论,到下午15:39 接近尾声 (忽略这形同虚设的马 ...
- 038_go语言中的状态协程
代码演示: package main import ( "fmt" "math/rand" "sync/atomic" "time ...