Java中的字符串用法小结

本文实例总结了Java中的字符串用法。分享给大家供大家参考。具体分析如下:

字符串的本质是char类型的数组,但在java中,所有用双引号""声明的字符串都是一个String类的对象。这也正体现了Java完全面向对象的语言特点。

String 类

1、String类对象表示的是一个常量字符串。它是不可变长度的。也就是说,一旦创建了一个String类的实例,那么这个实例所表示的串是不可改变的。类似于

str = str + "Hello";

这样的操作,实质上是将 str 和 "Hello" 这两个String对象合起来创建了一个新的String对象,然后将新String对象的引用赋给了str。大量使用这种操作,就会造成性能上的缺陷。如果需要经常改变字符串的内容,应该使用StringBuffer类或StringBuilder类。我们可以用一段小程序来看看 String 和 StringBuffer类的性能差异到底有多大。

class StringTest
{
 public static void main(String[] args)
 {
  /**
  * 分别用String 对象和 StringBuffer 对象执行10,000次追加操作
  * 测试执行时间
  * 2013.3.18
  */
  String constStr = "";
  long lTime = System.currentTimeMillis();
  for(int i = 0 ; i < 10000 ; ++i)
   constStr += i;
  System.out.println("Const String:"+(System.currentTimeMillis()-lTime));
  StringBuilder strBuf = new StringBuilder("");
  lTime = System.currentTimeMillis();
  for(int i = 0 ; i < 10000 ; ++i)
   strBuf.append(String.valueOf(i));
  System.out.println("Buffered String:"+(System.currentTimeMillis()-lTime));
 }
}

执行结果:

可以看到,StringBuilder秒过,而String类却要用300ms的时间,可见性能差异之巨大。

StringBuilder 和 StringBuffered都表示一个可变长度(mutable)的字符串对象,它们之间的区别在于,StringBuffered类会在线程同步方面做一些安全性处理,而StringBuilder则反之。所以如果只是在单线编程的话,StringBuilder要比StringBuffered效率稍高一些(其实区别也并不大)

2、"Hello World" 是一个String对象
我们可以直接把"Hello World"当作一个对象来使用,如:

if("Hello".equals("Hello"))
   System.out.println("Yes");

输出结果为Yes.

3、字符串对象比较要用equals()方法,而不能单纯地使用 == 来判断。因为 == 比较的是两个引用名称所引用的实例是否相同,equals()方法则比较的是两个对象中的字符串是否相等。

一个常见的问题是,下面的代码片断一共产生了几个String对象?

String str1 = new String("Hello");
String str2 = new String("Hello");

可能多数人会回答,2个。但事实上这里一共产生了3个String对象。除了str1 和str2,别忘了"Hello"也是一个String对象哦。

4、String池(Pool)

Java执行时会维护一个String池。当出现一个由双引号声明的字符串时,JVM会首先核查在内存中是否存在相同的String对象(字符相同),如果存在,则返回内存中已经存在的对象的引用 ,如果不存在才会创建一个新的String对象。这样可以节约内存。如下面一段代码,str1和str2实际上是指向的同一个String对象.

String str1 = "Hello";
String str2 = "Hello";

5、接收命令行参数

我们在声明main方法时,会声明一个String[] 类型的形参。这个String对象的数组就保存了用户在执行这个程序的时候所传递进来的命令行参数。注意,与C语言不同的是,Java里的命令行参数是从程序名称后第一个变量开始的。也就是说,String[]数据并不包括应用程序名。例如:

class strCmd
{
 public static void main(String[] args)
 {
  if(args.length > 0)
  {
   for(String str : args)
    System.out.println(str);
  }
 }
}

执行 java strCmd Hello World!时的输出结果为:

6、字符串的分离

类似于C语言中的strtok,String类也有一个split的方法可以以指定的格式分离一个字符串。split方法返回一个String对象的数组,表示分离出的每一段字符串。如:

class strSplit
{
 public static void main(String[] args)
 {
  String str = "Hello\tWorld\tI\tLove\tYou!";
  System.out.println("Original String : " + str);

  String[] strArr = str.split("\t");
  for(String s : strArr)
   System.out.println(s);
 }
}

其中,split()方法的参数可以是正则表达式。可以使用java.util包中的Matcher类的静态方法matches()来判断一个字符串是否符合正则表达式

String类还有更多其它强大的功能,我们应该学会阅读API文档。在这里就体现了英语的重要性了、、

希望本文所述对大家的java程序设计有所帮助。

(0)

相关推荐

  • java实现求两个字符串最长公共子串的方法

    本文实例讲述了java实现求两个字符串最长公共子串的方法.分享给大家供大家参考,具体如下: 这个是华为OJ上的一道题目.首先,如果我们用java写代码,华为OJ有以下三条规则需遵守,否则编译无法通过或者用例无法通过,规则如下: (1)一定不可以有包名: (2)主类名只能为Main: (3)不可以输出与结果无关的信息. 好了,按照以上规则,我们写出来的代码如下(此代码不是最优的,只是用来记录华为OJ上java代码的书写规则): import java.util.Scanner; public cl

  • Java截取字符串的方法

    本文实例讲述了Java截取字符串的方法.分享给大家供大家参考.具体实现方法如下: public static void main(String args[]) { //以该字符第一次出现,开始截取 //String str="abc.def"; //String str="abc.def.sdfsdf.fsdfd.ddddd.ggggg.ttttt"; //String str1=str.substring(str.indexOf(".")+1,

  • Java简单获取字符串像素的方法

    本文实例讲述了Java简单获取字符串像素的方法.分享给大家供大家参考,具体如下: 计算字符串的像素长度与高度: Graphics2D g = (Graphics2D)Toolkit.getDefaultToolkit(). getImage("imgname").getGraphics(); // 设置大字体 Font font = new Font("楷体", Font.ITALIC | Font.BOLD, 72); g.setFont(font); FontR

  • Java字符串技巧之删除标点或最后字符的方法

    删除字符串的所有标点 str = str.replaceAll("[\\pP''""]", ""); 在这里利用的是Unicode编码,Unicode 编码并不只是为某个字符简单定义了一个编码,而且还将其进行了归类. \pP 其中的小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀. 大写 P 表示 Unicode 字符集七个字符属性之一:标点字符. 其他六个是 L:字母: M:标记符号(一般

  • Java的字符串中对子字符串的查找方法总结

    Java中字符串中子串的查找共有四种方法,如下: 1.int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引. 2.int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引. 3.int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引. 4.int lastIndexOf(String str, int startI

  • java判断字符串是否为数字的方法小结

    本文实例总结了java判断字符串是否为数字的方法.分享给大家供大家参考,具体如下: 方法一:用JAVA自带的函数 public static boolean isNumeric(String str){ for (int i = str.length();--i>=0;){ if (!Character.isDigit(str.charAt(i))){ return false; } } return true; } 方法二:用正则表达式 public static boolean isNume

  • java递归法求字符串逆序

    本文实例讲述了java递归法求字符串逆序的方法.分享给大家供大家参考.具体实现方法如下: public static String reverseString(String x) { if(x==null || x.length()<2) return x; return reverseString(x.substring(1,x.length()))+ x.charAt(0); } 希望本文所述对大家的java程序设计有所帮助.

  • java实现检测是否字符串中包含中文

    代码非常实用,这里就不错废话,直接奉上 主要功能是实现判断字符串是否包含汉字 并且替换成ASCLL private static String regEx = "[\\u4e00-\\u9fa5]"; /** * 判断字符串是否包含汉字 并且替换成ASCLL * * @param str_para * @return str_result */ private static String isChinese_Replace( String str_para ) { Pattern p

  • Java中的字符串用法小结

    本文实例总结了Java中的字符串用法.分享给大家供大家参考.具体分析如下: 字符串的本质是char类型的数组,但在java中,所有用双引号""声明的字符串都是一个String类的对象.这也正体现了Java完全面向对象的语言特点. String 类 1.String类对象表示的是一个常量字符串.它是不可变长度的.也就是说,一旦创建了一个String类的实例,那么这个实例所表示的串是不可改变的.类似于 str = str + "Hello"; 这样的操作,实质上是将 s

  • java中random的用法小结

    目录 一.java.lang.Math.random()方法的用法 二. java.util.Random类用法 java中存在两个随机函数,它们分别来自java.long.Math.random()和 java.util.Random();其中前者的适用范围比较小,完全可以被后者取代. 一.java.lang.Math.random()方法的用法 ①.方法类型: public static double random(); 此方法是一个无参,double类型返回值的公开静态方法. 返回一个大于

  • Java中String.split()用法小结

    在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅供大家参考: 1.如果用"."作为分隔的话,必须是如下写法,String.split("\\."),这样才能正确的分隔开,不能用String.split("."); 2.如果用"|"作为分隔的话,必须是如下写法,String.split("\\|"),这样才能正确的分隔开,不能用String.s

  • Java中的多态用法实例分析

    本文实例讲述了Java中的多态用法.分享给大家供大家参考.具体分析如下: 多态,是面向对象的程序设计语言最核心的特征.封装性.继承性都比较简单,所以这里只对多态做一个小小的笔记... 1.什么是多态? 多态意味着一个对象可以多重特征,可以在特定的情况下,表现出不同的状态,从而应对不同的属性和方法.在Java中,多态的实现指的是使用同一个实现接口,以实现不同的对象实例. 例如,我们定义一个Parent类,再定义一个getName()方法返回一个字符串,定义一个形参为Parent类型的成员方法doS

  • 浅析java中stringBuilder的用法

    String对象是不可改变的.每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能. 通过用一个重载的构造函数方法初始化变量,可以创建 Strin

  • Java 中运行字符串表达式的方法

    在日常的开发中,偶尔会遇到运行字符串表达式的情况,通常这样的需求会对需求进行进一步分析,然后进行进一步 "特殊化",最后直接写到硬代码中,这样做的话,就不太好扩展了:也有另外的处理方式是采用 Java 内置的 JavaScript 引擎等运行字符串表达式,但是内置引擎也有弊端,比如频繁运行片段式的字符串的效率非常低,并且与 Java 之间的数据交互比较麻烦,于是,便产生了写一个"字符串表达式计算引擎"的想法... 写的过程其实没想象中那么麻烦,最初版大概在今年 5

  • java中stringBuilder的用法详解

    String对象是不可改变的.每次使用System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间.在需要对字符串执行重复修改的情况下,与创建新的String对象相关的系统开销可能会非常昂贵.如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类.例如,当在一个循环中将许多字符串连接在一起时,使用StringBuilder类可以提升性能. 通过用一个重载的构造函数方法初始化变量,可以创建StringBui

  • java中DelayQueue实例用法详解

    在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法.这里的删除需要一定的时间才能生效,有点类似于过期处理的理念.下面我们就DelayQueue的概念.特点进行讲解,然后在代码示例中体会DelayQueue的使用. 1.概念 是一个带有延迟时间的无界阻塞队列.队列中的元素,只有等延时时间到了,才能取出来.此队列一般用于过期数据的删除,或任务调度.以下,模拟一下定长时间的数据删除. 2.特点 (1)无边界设计 (2)添加(put)不阻塞,

  • Java中的MapStruct用法详解

    目录 1 MapStruct配置 2 原理&性能 2.1 实现原理 3 使用方法 3.1 转换器的检索 3.1.1 使用Mappers工厂获取 3.1.2 通过依赖注入的方式获取 3.2 简单映射 3.2.1 基本映射 3.2.2 多源参数映射 3.2.3 更新对象 3.3 数据类型转换 3.3.1 对于基础数据类型会进行自动隐式的转换 3.3.2 指定转换格式 3.3.3 属性为复杂对象的映射 3.3.4 自定义转换器 3.3.5 使用限定符限定使用转换方法 3.4 Map的映射 3.5 枚举

  • Java中StringTokenizer的用法简介汇总

    目录 StringTokenizer的用法 StringTokenizer 构造方法: StringTokenizer 常用方法: 补充:下面在介绍下StringTokenizer的使用 下文笔者讲述StringTokenizer对象的简介说明,如下所示 StringTokenizer的简介 Java StringTokenizer属于java.util包 用于分隔字符串 StringTokenizer构造方法 StringTokenizer(String str): 构造一个用来解析 str

随机推荐