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的时候 , 其余字 ...
随机推荐
- Letex中表格问题
最近在学习使用Letex,在学习过程中碰到很多小问题,故记之. 以下是一个参数表的实例(绘成三线表的形式). \begin{table}[hp] %%参数: h:放在此处 t:放在顶端 b:放在底端 ...
- python爬虫常用headers设置
import random import re def headers(url, use='pc'): pc_agent = [ "Mozilla/5.0 (Macintosh; U; In ...
- LQB2013A03振兴中华
最近状态出了点问题呜呜呜,可能是天有点热吧加上有一点点不太舒服,,,稳住啊! 明显一个递归(但是就是不会写) 递归:(一般这种找有多少个的题,返回值都是int) 首先找变化的东西当作参数.(本题是坐标 ...
- springboot 使用 dev tool 导致 CastException
1.背景 项目使用了 Spring + shiro 实现 权限控制, 使用AOP 对 每个 Controller 进行 log 记录时,需要从 shiro 中 获取 username字段, 问题就这样 ...
- float对内联元素和块元素的影响
写在前面:附一篇w3s的关于css float的讲解:http://www.w3school.com.cn/css/css_positioning_floating.asp float属性还没有彻底了 ...
- PHP tanh() 函数
实例 返回不同数的双曲正切: <?php高佣联盟 www.cgewang.comecho(tanh(M_PI_4) . "<br>");echo(tanh(0.5 ...
- luogu P2973 [USACO10HOL]Driving Out the Piggies G 驱逐猪猡
luogu LINK:驱逐猪猡 bzoj LINK:猪猪快跑 问题是在1时刻有个炸蛋在1号点 这个炸弹有p/q的概率爆炸 如果没有爆炸 那么会有1/di的概率选择一条边跳到另外一个点上重复这个过程. ...
- Jenkins总结2-部署maven项目
1. 部署Maven项目 1.1 新建项目 选择新建任务 输入任务名称,并选择构建一个Maven项目.如果你的页面没有看到“构建一个maven项目”,则需要安装Maven Integration插件. ...
- 32-关键字:abstract
abstract: 抽象的 1.可以用来修饰:类.方法 2.具体的:abstract修饰类:抽象类 * > 此类不能实例化 * > 抽象类中一定有构造器,便于子类实例化时调用(涉及:子类对 ...
- 18-关键字:this
1.可以调用的结构:属性.方法:构造器2.this调用属性.方法: this理解为:当前对象 或 当前正在创建的对象 2.1 在类的方法中,我们可以使用"this.属性"或&quo ...