java中string字符串操作程序整理

String的两种实例化方法

  String本身是一个类,在String类中定义了如下的构造方法:

    public String (String original)

  可以接收一个String类的对象,并重新实例化String对象,除了此方法之外,String还可以采用直接赋值的方式进行对象的实例化。

 代码如下 复制代码
public class StringDemo01{
 public static void main(String args[]){
  String str1 = "hello" ; //使用直接赋值的方式完成
  String str2 = new String("WORLD") ; //通过构造方法完成
  System.out.println(str1 + str2) ; //进行字符串的连接操作
 }
}

  此时,两个String类型的对象都实例化。

 

2、String的比较方式

  现有如下一道程序,观察String的比较问题:

 代码如下 复制代码

public class StringDemo01{
 public static void main(String args[]){
  String str1 = "hello" ; //使用直接赋值的方式完成
  String str2 = new String("hello") ; //通过构造方法完成
  String str3 = str2 ; //通过构造方法完成
  System.out.println("str1 == str2 --> " + (str1 == str2)) ; //false
  System.out.println("str1 == str3 --> " + (str1 == str3)) ; //false
  System.out.println("str2 == str3 --> " + (str2 == str3)) ; //true
 }
}

从内存关系来分析结果:

得到一个结果,实际上对于“==”,比较的是两个对象的地址是否相等,具体来讲实际上比较的是地址的值,因为地址是以数值的形式存在的。

  但是现在真正要比较的不是地址的值,而是两个字符串的内容,所以现在就需要使用String类中的equals()方法完成比较,此方法定义如下:

    public boolean equals(String str)

  比如:使用equals()修改程序

 代码如下 复制代码
public class StringDemo01{
 public static void main(String args[]){
  String str1 = "hello" ; //使用直接赋值的方式完成
  String str2 = new String("hello") ; //通过构造方法完成
  String str3 = str2 ; //通过构造方法完成
  System.out.println("str1 equals str2 --> " + str1.equals(str2)) ; //true
  System.out.println("str1 equals str3 --> " + str1.equals(str3)) ; //true
  System.out.println("str2 equals str3 --> " + str2.equals(str3)) ; //true
 }
}
  

此时,因为三个字符串的内容完全相等,所以此时equals用于比较字符串内容。

 

3、一个字符串实际上就是String的匿名对象

  一个字符串是使用“"”括起来的,那么一个字符串的常量实际上本身就属于String的一个匿名对象。

 代码如下 复制代码
public class StringDemo01{
 public static void main(String args[]){
  String str1 = "hello" ; //使用直接赋值的方式完成
  System.out.println("hello".equals(str1)) ; //true
 }
}

  

 

4、String的两种实例化方式的区别

  内存图形表示:

    String str1 = "hello" ;

    

    现在在堆内存空间中,只开辟了有一个空间,不会产生多余的内容。

 

  现在使用关键字new的方式:

    String str2 = new String("hello") ;

    可以发现,程序开辟了两个空间,与直接赋值相比,肯定使用直接赋值的方式方便,所以在开发中绝对不能使用关键字new调用String(String original)的构造方法。

    而且,如果使用直接赋值的方式也可以减少堆内存的开销。


 代码如下 复制代码
public class StringDemo01{
	public static void main(String args[]){
		String str1 = "hello" ;	//使用直接赋值的方式完成
		String str2 = "hello" ;	//使用直接赋值的方式完成
		String str3 = "hello" ;	//使用直接赋值的方式完成
		System.out.println("str1 == str2 --> " + (str1 == str2)) ;	//true
		System.out.println("str1 == str3 --> " + (str1 == str3)) ;	//true
		System.out.println("str2 == str3 --> " + (str2 == str3)) ;	//true
	}
}

    实际上,以上的三个对象表示的都是同一个空间的引用,因为对于String来讲,使用直接赋值的方式,会在字符串池中保存内容。如果之后再声明字符串的时候发现内容相同,则不会重新开辟空间,而是从内存池中取出数据继续使用。

 

5、字符串的内容一旦声明之后则无法修改


 代码如下 复制代码
public class StringDemo01{
	public static void main(String args[]){
		String str = "hello" ;	//使用直接赋值的方式完成
		str += " world" ;
		System.out.println(str) ;
	}
}

  虽然最终输出的结果改变了,但是字符串的内容没有改变:

  实际上来讲,字符串变量的改变是改变的内存空间地址的指向,而本身的字符串内容没有任何变化。所以,在开发中一下的操作代码绝对要避免:


 代码如下 复制代码
public class StringDemo01{
	public static void main(String args[]){
		String str = "hello" ;	//使用直接赋值的方式完成
		for (int i = 0; i < 100; i++){
			str += i ;
		}
		System.out.println(str) ;
	}
}

    以上的操作代码要不断的断开已有的连接,指向新连接100次,整体代码的性能及其低,所以遇到此类绝对不要使用。

6、String的常用操作方法
  (1)、字符与字符串
    在各个语言中实际上个一个字符串就表示一组字符。所以在String类中提供了以下的方法操作字符与字符串间的转换关系:
      根据字符串中的索引找到指定位置的字符:public char charAt(int index)
      将字符串变为字符数组:public char[] toCharArray()
      将字符数组变为字符串:
        将全部的字符数组变为String类型:public String(char[] value)
        将部分的字符数组变为String类型:public String(char[] value, int offset, int count)
 
  例1:取出字符串中指定位置的字符

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello" ;  char c = str.charAt(1) ;  System.out.println(c) ; }}

  

  例2:字符串 <--> 字符数组

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world!!!" ;  char c[] = str.toCharArray() ; //将字符串变为字符数组  for (int i=0; i<c.length; i++){   System.out.print(c[i] + "、") ;  }  String str1 = new String(c) ; //将全部的字符数组重新变为String  String str2 = new String(c, 0 ,5) ; //将0~5的字符数组重新变为String  System.out.println() ;  System.out.println(str1) ;  System.out.println(str2) ; }}

  

  (2)、字节与字符串
    与字符数组的操作一致,一个字符串也可以变为字节数组,一个字节数组也可以变为字符串:
      String --> 字节数组:public bytr[] getBytes()
      字节数组 --> String:
        全部转换:public String(byte[] bytes)
        部分转换:public String(byte[] bytes, int offset, int length)
 
  例:字节数组 --> String

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world!!!" ;  byte c[] = str.getBytes() ; //将字符串变为byte数组  String str1 = new String(c) ; //将全部的byte数组重新变为String  String str2 = new String(c, 0 ,5) ; //将0~5的byte数组重新变为String  System.out.println(str1) ;  System.out.println(str2) ; }}
  

  (3)、判断是否以指定的字符串开头或结尾

    判断是否以指定的字符串开头:public boolean sttsWith(String prefix)
    判断是否以指定的字符串结尾:public boolean endsWith(String suffix)
  例:验证操作

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "**hello world!!!##" ;  System.out.println(str.startsWith("**")) ; //true  System.out.println(str.endsWith("##")) ; //true }}
  

  (4)、替换操作

    使用以下的方法可以完成替换的操作:
      public String replaceAll(String regex, String replacement)
  例:替换内容

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world" ;  String newStr = str.replaceAll("l", "x") ; //将全部的l用x替换  System.out.println(newStr) ; }}
 

 

  (5)、字符串截取
    使用以下两个方法可以完成字符串的截取操作:
      全部截取:public String substring(int beginIndex)
      部分截取:public String substring(int beginIndex, int endIndex)
  例:验证操作

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world" ;  String sub1 = str.substring(6) ; //world  String sub2 = str.substring(0, 4) ; //hello  System.out.println(sub1) ;  System.out.println(sub2) ; }}
 

 

  (6)、字符串的拆分操作
    可以将字符串按照指定的内容进行拆分操作:
      public String[] split(string regex)
  例:拆分字符串

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world" ;  String s[] = str.split(" ") ; //按照空格拆分  for (String st:s ){   System.out.println(st) ;  } }}
  

  (7)、字符串查找

    如果需要在一个字符串中查找是否存在指定的内容,可以使用以下的两个方法:
      取得指定字符串的位置:public int indexOf(String str)
        此方法返回int型数据,如果查找到了则返回位置,查找不到,返回-1
      从指定位置开始查找:public int indexOf(String str, int fromIndex)
      直接查找:public boolean contains(String s)
  例1:查找操作

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world" ;  System.out.println(str.contains("hello")) ; //true  System.out.println(str.contains("hl")) ; //false }}

  

  例2:查找位置

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world" ;  System.out.println(str.indexOf("hello")) ;  System.out.println(str.indexOf("hl")) ;  if (str.indexOf("hello") != -1){   System.out.println("查找到了所需要的内容") ;  } }}
  

  例3:指定查找的开始位置


 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "hello world" ;  System.out.println(str.indexOf("h" ,5)) ; //true }}
  

  (8)、字符串的其他操作

    去掉左右空格:public String trim()
    取得字符串长度:public int length()
    转大写:public String toUpperCase()
    转小写:public String toLowerCase()
  例:验证操作

 代码如下 复制代码
public class StringDemo01{ public static void main(String args[]){  String str = "   hello world   " ;  System.out.println(str.trim()) ; //去掉空格  System.out.println(str.trim().toUpperCase()) ; //转换为大写  System.out.println(str.trim().length()) ; //求出去掉空格后的字符串的长的 }}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 字符串
, int
, class
, static
代码
java遍历string字符串、java截取string字符串、java string 空字符串、java string字符串、java字符串拼接string,以便于您获取更多的相关知识。

时间: 2024-09-29 03:51:54

java中string字符串操作程序整理的相关文章

字符串-java中String究竟是传递的值,还是引用

问题描述 java中String究竟是传递的值,还是引用 很多人说,java中的String虽然是对象,但是具有值类型的特征.他是值传递,传递的值. 我认为这这种说法完全是错误的. String和普通对象毫无区别,和其他对象一样,传递的是引用,而不是值. 一段String的运用代码: String a = "123"; public void change(String a){ a = "234"; } 很多人会说,a的值没有变,是因为String是值传递,问题是,

string-关于java中String类型汉字字符串的升序问题

问题描述 关于java中String类型汉字字符串的升序问题 本人新手,遇到一个项目问题:有若干个对象,每个对象里面都有一个String类型的姓名属性,现在要求根据姓名属性的升序将这些对象排列在List集合里,问如何将String类型的汉字升序排列.求大神 解决方案 String[] strs = {""张三(Z)""李四(L)""王五(W)""}; // 定义一个中文排序器 Comparator c = Collator.g

字符串-java中String str1…的区别,详细见内容

问题描述 java中String str1-的区别,详细见内容 String str1,str2; str1 = "we are friends"; str2 = "we are friends"; 和 String str1 = "we are friends"; String str2 = "we are friends"; 在内存上的区别是什么? 是否有区别? 解决方案 没有区别,他们指向同一个对象 解决方案二: 就最后

Java中jqGrid 学习笔记整理——进阶篇(二)_java

相关阅读: Java中jqGrid 学习笔记整理--进阶篇(一) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2. 2.创建表 双击打

Java 中的字符串常量池详解_java

Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使用,尤其是字面量的方式.然而这两种实现其实存在着一些性能和内存占用的差别.这一切都是源于JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池.

java中String的一些方法深入解析

以下是对java中String的一些方法进行了详细的分析介绍,需要的朋友可以参考下   1.public String(char[] c,begin,length).从字符数组c的下标begin处开始,将长度为length的字符数组转换为字符串. begin与length可以省略,即将字符数组c转换为字符串.另:字符数组可改为字节数组byte[] b.char[] c=new char[]{'j','y','6','a','4','t','9'}; String s1=new String(c)

JAVA 中一个字符串s ,有36位取前24位,代码怎么写?

问题描述 JAVA 中一个字符串s ,有36位取前24位,代码怎么写? 求解..JAVA 中 一个字符串s ,有36位取前24位,代码怎么写? 解决方案 s.substring(0 24) 解决方案二: s = s.subString(s 24); 解决方案三: s.substring(024); substring()方法包头不包尾索引从0开始 解决方案四: s = s.subString(024); substring()方法包头不包尾索引从0开始 解决方案五: s = s.subStrin

java 中 String.indexOf(string) 就是找不到,明明存在在文件中 。求助?

问题描述 java 中 String.indexOf(string) 就是找不到,明明存在在文件中 .求助? 我从网站或文件中读取一个文档,存储在一个String str中:比如此时我要查找一个 子字符串 substr 用 indexOf方法返回的为-1 但是在str中确实存在substr 在记事本或网页中可以查找到.把str 输出到console中也是存在 substr的求帮忙分析下原因?解决方法?谢谢 解决方案 大小写.全角半角.隐藏的空格或者特殊字符等细节检查下,还有,访问的是不是你期待的

string-关于java中String类型参数传递的问题,谁能给我讲清楚

问题描述 关于java中String类型参数传递的问题,谁能给我讲清楚 我知道java里面参数传递是值传递,这点不用给我解释了.但是: import java.util.*; public class Test { public static void change(String s){ s="2"; } public static void main(String[] args) throws Exception{ String s="1"; change(s);