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的时候 , 其余字 ...
随机推荐
- ubuntu18.04安装opencv+CUDA10.2+cuDNN+YOLOv3
安装顺序: Opencv 显卡驱动 CUDA10.2 cuDnn YOLOv3 1.Opencv3.2.0安装 搭建依赖环境 sudo apt-get install build-essential ...
- 友好城市dp
// // Created by Arc on 2020/4/27. //对了,这篇题解的代码是小白自己写的.有啥错误还请各位大佬多多包涵. /* * 某国有一条大河(一条大河~~~~,波浪宽~~~~ ...
- PHP preg_filter() 函数
preg_filter 函数用于执行一个正则表达式搜索和替换.高佣联盟 www.cgewang.com 语法 mixed preg_filter ( mixed $pattern , mixed $r ...
- Docker 基础知识 - 使用 tmpfs 挂载(tmpfs mounts)管理应用程序数据
卷(volumes) 和 绑定挂载(bind mounts) 允许您在主机和容器之间共享文件,这样即使在容器停止后也可以持久存储数据. 如果在 Linux 上运行 Docker,那么还有第三种选择:t ...
- 电力规约DL/T 654 2007多功能电表通信协议 调试工具
DL/T 654 2007多功能电表通信协议 调试工具 最近调试DL/T654 2007电力规约,在网上找到一个比较好用的工具,分享给大家,希望对大家有帮助. CSDN需要积分,我传百度网盘了, 内含 ...
- 每日一道 LeetCode (8):删除排序数组中的重复项和移除元素
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- css实现折扇效果
总结思路: 1.首先进行结构的书写 <div class="box"></div> 2.要进行图片的重叠要用到position定位,需要重叠的元素及子元 ...
- 2020 Multi-University Training Contest 1 部分题解
目录 Cookies Distinct Sub-palindromes Fibonacci Sum Finding a MEX Leading Robots Math is Simple Minimu ...
- java基础之字符串
以下内容摘自<java编程思想>第十三章. 1. 不可变 String String 对象是不可变对象,String 类中每一个看起来会修改 String 值的方法,实际上都是创建了一个全 ...
- 【JavaScript】windows.open用法详解
windows.open("URL","窗口名称","窗口外观设定");的用法详解 function onNewWindows(redire ...