Java字符串

Java字符串

String对象是不可变的。String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的对象,以包含修改后的字符串。而最初的String对象则丝毫未动。

import java.util.*;

public class Immutable{
	public static String upcase(String s){
		return s.toUpperCase();
	}
	public static void main(String[] args){
		String q="helloworld";
		System.out.println(q);
		String qq=upcase(q);
		System.out.println(qq);
		System.out.println(q);
	}
}

其实,每当String对象作为方法的参数时,都会复制一份引用,而该引用所指的对象其实一直待在单一的物理位置上,从未动过。

不可变性会带来一定的效率问题。为String对象重载+操作符就是一个例子。重载的意思是:一个操作符应用于特定的类时,被赋予了特殊的意义。用于String的+,+=是Java中仅有的两个重载过的操作符,而Java并不允许程序员重载任何操作符。

import java.util.*;

public class Concatenation{
	public static void main(String[] args){
		String mango="mango";
		String s=mango+"abc"+"xyz"+47;
		System.out.println(s);
	}
}

String上的操作

length():String中字符的个数

charAt():取得String上该索引位置上的char

toCharArray():生成一个char[],包含所有的String字符

equals()/equalsIgnoreCase():比较两个String的内容是否相同

compareTo():按字典顺序比较字符串String的内容,比较结果为负数,零或者正数

contains():如果String对象包含参数内容,则返回true

startsWith():返回boolean结果,表明String是否以此参数起始

endsWith():返回boolean结果,表明String是否以此参数结尾

indexOf()/lastIndexOf():如果String对象并不包含此参数,就返回-1,否则返回此参数在String中的起始索引。

lastIndexOf()是从后往前搜索的。

substring():返回一个新的String,以包含参数指定的子字符串

concat():返回一个新的String,内容为原始String连接上参数String

replace():返回替换字符后的新String对象

toLowerCase()/toUpperCase():将字符串的大小写改变后,返回一个新String对象

trim():将String对象的两端空白字符删除后,返回一个新的String对象

valueOf():返回一个表示参数内容的String

String格式化输出

System.out.printf(),System.out.format()使得控制输出的代码更加简单。

import java.util.*;

public class Receipt{
	private  double total=0;
	private Formatter f=new Formatter(System.out);
	public void printTitle(){
		f.format("%-15s %5s %10s\n","Item","Qty","Price");
		f.format("%-15s %5s %10s\n","----","---","-----");
	}
	public void print(String name,int qty,double price){
		f.format("%-15.15s %5d %10.2f\n",name,qty,price);
		total+=price;
	}
	public void printTotal(){
		f.format("%-15s %5s %10.2f\n","Tax","",total*0.06);
		f.format("%-15s %5s %10s\n","","","-----");
		f.format("%-15s %5s %10.2f\n","Total","",total*1.06);
	}
	public static void main(String[] args){
		Receipt receipt=new Receipt();
		receipt.printTitle();
		receipt.print("afafaa",4,4.25);
		receipt.print("ryturty",3,5.1);
		receipt.print("hgjd",1,14.29);
		receipt.printTotal();
	}
}

时间: 2024-08-26 07:39:18

Java字符串的相关文章

Java字符串学习笔记

通过看jdk源码发现Java字符串中有如下关系: 接口中的方法默认都是抽象的可以写也可以不写. public interface CharSequence { int length(); char charAt(int index); CharSequence subSequence(int start, int end); public String toString(); } 其他的都是该接口的实现类且是最终类,不能被继承. public final class String impleme

Java字符串转16 进制工具类Hex.java

原文:Java字符串转16 进制工具类Hex.java 源代码下载地址:http://www.zuidaima.com/share/1550463378410496.htm Java 字符串转 16 进制工具类 Hex.java 实现 16进制 0xfecd .. 和 java 字符串之间的互转换! 如果做开发,通常用户登陆密码都会 mad5(salt + pwd) 然后再将 md 之后的数据 hex 一下. 这个工具类,就是实现此效果的. /* * */ package com.zuidaim

图解Java字符串不变性

1. 声明字符串 String s = "abcd"; 这里,s存储了“abcd”在这个字符串对象的引用,如下图所示: 2. 将字符串变量s赋值给字符串变量s2 String s2 = s; 此时,s2也指向了“abcd”. 3. 字符串合并 s = s.concat("ef); 这里,明显是新创建了字符串对象“abcdef”,也就是说,在java中字符串对象一旦被创建就不会改变. 总结 在Java中,一旦一个字符串对象在内存中(通常在堆中)被创建,它就不会被改变.同时字符串

Java字符串常见实例与函数

字符串比较 字符串函数 compareTo (string) ,compareToIgnoreCase(String) 及 compareTo(object string) 来比较两个字符串,并返回字符串中第一个字母ASCII的差值. public class StringCompareEmp{ public static void main(String args[]){ String str = "Hello World"; String anotherString = "

Java字符串的10大热点问题,你都懂吗?

转自 威哥干JAVA http://www.codingke.com 下面我为大家总结了10条Java开发者经常会提的关于Java字符串的问题,如果你也是Java初学者,仔细看看吧: 1.如何比较字符串,应该用”==”还是equals()? 总的来说,”==”是用来比较字符串的引用地址,而equals()才是比较字符串的值.两个值相同的字符串用”==”比较结果有可能是false,而用equals()则一定为true.除非两个字符串是同一个new出来的对象,不然比较字符串值是否相同应该要用equa

JAVA字符串格式化-String.format()的使用(转)

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

关于Java字符串的几个重点

String.StringBuilder和StringBuffer哪个更优? String和StringBuilder:StringBuilder是可变的,也就是说用StringBuilder创建的字符串你可以随时改变它.StringBuilder和StringBuffer:StringBuffer是同步的,它是线程安全(thread-safe)的,但效率要比StringBuilder差得多. 如何重复输出字符串? 在Python中,我们只需要为字符串乘上一个数字就可以重复输出该字符串了.然而在

深入Java字符串

深入Java字符串 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 一.从根本上认识java.lang.String类和String池 首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点.从中可以看到: 1.String类是final的,不可被继承.public final class String. 2.String类是的本质是字符数组char[], 并且其值不可改变.pr

java 字符串内存分配的分析与总结

经常在网上各大版块都能看到对于java字符串运行时内存分配的探讨,形如:String a = "123",String b = new String("123"),这两种形式的字符串是存放在什么地方的呢,其实这两种形式的字符串字面值"123"本身在运行时既不是存放在栈上,也不是存放在堆上,他们是存放在方法区中的某个常量区,并且对于相同的字符串字面值在内存中只保留一份.下面我们将以实例来分析. 1.==运算符作用在两个字符串引用比较的两个案例: p