3.1、字符与字符串
很多的编程语言都会强调利用字符数组来描述字符串,实际上在Java里面也存在有类似的概念,在String类中也提供有一系列与字符操作有关的方法。
No. |
方法名称 |
类型 |
描述 |
1 |
public String(char[] value) |
构造 |
将全部的字符数组作为String的内容 |
2 |
public String(char[] value, int offset, int count) |
构造 |
将部分的字符数组变为字符串,设置字符数组的开始索引与使用个数 |
3 |
public char charAt(int index) |
普通 |
返回指定索引位置上的字符 |
4 |
public char[] toCharArray() |
普通 |
将字符串以字符数组的形式返回 |
范例:验证charAt()方法
public class StringDemo { public static void main(String args[]) { String str = "hello" ; char c = str.charAt(0) ; System.out.println(c) ; } }
在程序中字符串索引都是从0开始的。
而后最为关键的是实现字符串与字符数组间的互相转换。
范例:将字符串变为字符数组
public class StringDemo { public static void main(String args[]) { String str = "helloworld" ; char [] data = str.toCharArray() ;// 将字符串变为字符数组 for (int x = 0 ; x < data.length ; x ++) { System.out.print(data[x] + "、") ; } } }
当字符串变为字符数组之后就可以针对于里面的每一个字符进行操作。
范例:将字符串中的小写字母变为大写字母
· 小写字母的编码 > 大写字母的编码,差了32,也就是说每一个字符都减去32即可。
public class StringDemo { public static void main(String args[]) { String str = "helloworld" ; char [] data = str.toCharArray() ; // 将字符串变为字符数组 for (int x = 0 ; x < data.length ; x ++) { data[x] -= 32 ; // 编码减去32,成大写 } System.out.println(new String(data)) ; System.out.println(new String(data,5,5)) ; // 第5个索引,之后取5个长度的内容 } }
下面可以利用此操作功能判断某一个字符串是否全部由数字所组成。
· 将字符串变为字符数组,这样做的目的可以进行每个字符的依次判断;
· 判断每一个字符的范围是否是数字:'0' ~ '9'之间。
范例:实现判断
public class StringDemo { public static void main(String args[]) { String str = "123" ; System.out.println(isNumber(str)) ; } public static boolean isNumber(String temp) { char data [] = temp.toCharArray() ; // 将字符串变为字符数组 for (int x = 0 ; x < data.length ; x ++) { if (data[x] < '0' || data[x] > '9') { // 不是数字 return false ; } } return true ; } }
3.2、字节与字符串
除了字符可以与字符串进行互相转换之外,字节也可以进行转换,但是这样的转换往往会出现在实际的开发环节中。
No. |
方法名称 |
类型 |
描述 |
1 |
public String(byte[] bytes) |
构造 |
将全部字节数组变为字符串 |
2 |
public String(byte[] bytes, int offset, int length) |
构造 |
将部分字节数组变为字符串 |
3 |
public byte[] getBytes() |
普通 |
将字符串变为字节数组 |
4 |
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException |
普通 |
编码转化 |
首先对于byte一定要清楚,虽然它的范围要比char小,但是byte还是可以明确的描述出字母的范围的。
范例:利用字节数组实现小写字母变为大写字母的操作
public class StringDemo { public static void main(String args[]) { String str = "helloworld" ; byte data [] = str.getBytes() ; // 将字符串变为字节数组 for (int x = 0 ; x < data.length ; x ++) { data[x] -= 32 ; // 改变编码 } System.out.println(new String(data)) ; } }
3.3、字符串比较
现在至少应该知道了字符串比较有一个equals()方法,但是此方法本身是属于区分大小写的比较,为此在Java里面针对于字符串的比较实际上还有其他方法。
No. |
方法名称 |
类型 |
描述 |
1 |
public boolean equals(String anObject) |
普通 |
区分大小写的字符串比较 |
2 |
public boolean equalsIgnoreCase(String anotherString) |
普通 |
不区分大小写的字符串比较 |
3 |
public int compareTo(String anotherString) |
普通 |
比较字符串大小 |
4 |
public int compareToIgnoreCase(String str) |
普通 |
不区分大小写比较字符串大小 |
范例:观察equals()的问题
public class StringDemo { public static void main(String args[]) { String strA = "hello" ; String strB = "HEllo" ; System.out.println(strA.equals(strB)) ; // false System.out.println(strA.equalsIgnoreCase(strB)) ; // true } }
验证码操作中可真的部分大写或者是小写字母。
在进行字符串相等的比较操作之中,最为关键的一个方法是:compareTo(),这个方法本身返回一个int型数据,而这个int型数据有三种结果:大于(>0)、小于(<0)、等于(=0)。
范例:比较字符串大小
public class StringDemo { public static void main(String args[]) { String strA = "A" ; String strB = "a" ; System.out.println(strA.compareTo(strB)) ; // -32 System.out.println(strA.compareToIgnoreCase(strB)) ; // 0 } }
在compareTo()方法之中要进行比较是依据编码进行相减得来的。所以利用compareTo()返回值范围进行判断就可以区分大小关系了。
public class StringDemo { public static void main(String args[]) { String strA = "a" ; String strB = "a" ; System.out.println(strA.compareTo(strB)) ; // -32 System.out.println(strA.compareToIgnoreCase(strB)) ; // 0 if (strA.compareTo(strB) == 0) { System.out.println("两个字符串的内容相同!") ; } } }
3.4、字符串查找
从一个完整的字符串之中查找一些子字符串,而可以实现这种字符串查找功能的方法有如下几个:
No. |
方法名称 |
类型 |
描述 |
1 |
public boolean contains(String s) |
普通 |
判断某一个字符串是否存在 |
2 |
public int indexOf(String str) |
普通 |
取得某一个子字符串的索引位置,找不到返回-1 |
3 |
public int indexOf(String str, int fromIndex) |
普通 |
从指定索引位置开始检索子字符串位置,找不到就返回-1 |
4 |
public int lastIndexOf(String str) |
普通 |
从后向前查找指定子字符串的位置,找不到返回-1 |
5 |
public int lastIndexOf(String str, int fromIndex) |
普通 |
从指定位置由后向前查找子字符串的位置,找不到返回-1 |
6 |
public boolean startsWith(String prefix) |
普通 |
判断是否以某个字符串开头 |
7 |
public boolean startsWith(String prefix, int toffset) |
普通 |
从指定位置判断是否以某个字符串开头 |
8 |
public boolean endsWith(String suffix) |
普通 |
是否以指定的字符串结尾 |
如果要查找中间的内容,那么现在基本上都使用contains()方法了。
范例:使用contains()方法
public class StringDemo { public static void main(String args[]) { String str = "hello" ; // 0:h、1:e、2:l、3:l、4:o。 if (str.contains("l")) { // 此方法直接返回true或者是false System.out.println("已查找到!") ; } } }
contains()方法虽然现在用的比较多,但是其是在JD K1.5后才提供的。而在JD 1.5之前那么只能够通过indexOf()方法实现。
范例:利用indexOf()方法判断
public class StringDemo { public static void main(String args[]) { String str = "hello" ; // 0:h、1:e、2:l、3:l、4:o。 System.out.println(str.indexOf("l")) ; // 2,第一个满足的位置 if (str.indexOf("l") != -1) { // 现在表示索引查找到了 System.out.println("内容已经查找到!") ; } } }
默认情况下indexOf()都是从第一个字母开始查找。那么也可以利用其的重载方法从指定索引位置查找。
范例:其他查找
public class StringDemo { public static void main(String args[]) { String str = "hello" ; // 0:h、1:e、2:l、3:l、4:o。 System.out.println(str.indexOf("l",3)) ; // 3 System.out.println(str.lastIndexOf("l")) ; // 3 } }
在字符串查找操作里面还可以判断开头或者是结尾。
范例:判断开头或结尾
public class StringDemo { public static void main(String args[]) { String str = "**@@hello##" ; System.out.println(str.startsWith("**")) ; // true System.out.println(str.startsWith("@@",2)) ; // true System.out.println(str.endsWith("##")) ; // true } }
这几个查询现在出现最多的就是contains()、startsWith()、endsWith()。
3.5、字符串截取
可以通过一个完整的字符串截取里面的子字符串,那么这个时候使用方法如下:
No. |
方法名称 |
类型 |
描述 |
1 |
public String substring(int beginIndex) |
普通 |
从指定索引位置截取到结尾 |
2 |
public String substring(int beginIndex, int endIndex) |
普通 |
截取指定索引范围的内容 |
范例:观察截取操作
public class StringDemo { public static void main(String args[]) { String str = "helloworldmldn" ; System.out.println(str.substring(5)) ; // worldmldn System.out.println(str.substring(5,10)) ; // world System.out.println(str.substring(0,5)) ; // hello } }
实际的工作之中,这种截取操作很常用。
3.6、字符串替换
将一个指定的字符串替换为其他内容,就属于替换功能,在String类中有如下的方法支持替换操作。
No. |
方法名称 |
类型 |
描述 |
1 |
public String replaceAll(String regex, String replacement) |
普通 |
字符串的全部替换 |
2 |
public String replaceFirst(String regex,String replacement) |
普通 |
替换第一个内容 |
范例:观察替换操作
public class StringDemo { public static void main(String args[]) { String str = "helloworld" ; System.out.println(str.replaceAll("l","_")) ; System.out.println(str.replaceFirst("l","_")) ; } }
实际上利用替换的功能可以消除掉数据中的全部空格。
public class StringDemo { public static void main(String args[]) { String str = "h e l l o w o rl d" ; System.out.println(str.replaceAll(" ","")) ; } }
3.7、字符串拆分
可以将一个完整的字符串根据指定的内容进行拆分,拆分后的结果就是多个字符串,也就是一个字符串的对象数组,可以使用的操作方法有如下几个:
No. |
方法名称 |
类型 |
描述 |
1 |
public String[] split(String regex) |
普通 |
全部拆分 |
2 |
public String[] split(String regex, int limit) |
普通 |
部分拆分 |
范例:观察split()方法的使用
public class StringDemo { public static void main(String args[]) { String str = "hello world mldn nihao" ; String result [] = str.split(" ") ; // 全拆分 for (int x = 0 ; x < result.length ; x ++) { System.out.println(result[x]) ; } } }
现在是按照空格全部进行了拆分。
范例:拆分部分内容
public class StringDemo { public static void main(String args[]) { String str = "hello world mldn nihao" ; String result [] = str.split(" ",2) ; // 全拆分 for (int x = 0 ; x < result.length ; x ++) { System.out.println(result[x]) ; } } }
现在如果给你一个ip地址,那么一定是按照“.”拆。但是这个“.”不能够直接使用,因为它属于正则表达式的定义范畴,所以日后如果发现不能够拆分的数据必须进行转义,使用“\\”。
范例:拆分IP
public class StringDemo { public static void main(String args[]) { String str = "192.168.1.1" ; String result [] = str.split("\\.") ; // 全拆分 for (int x = 0 ; x < result.length ; x ++) { System.out.println(result[x]) ; } } }
在字符串的组成之中,也可能包含有“|”问题。
public class StringDemo { public static void main(String args[]) { String str = "192|168|1|1" ; String result [] = str.split("\\|") ; // 全拆分 for (int x = 0 ; x < result.length ; x ++) { System.out.println(result[x]) ; } } }
3.8、其他操作方法
以上是一些可以进行归类的操作方法,但是有些操作方法在日后的课程里面还会有详细的讲解,而还有一些小的操作方法。
No. |
方法名称 |
类型 |
描述 |
1 |
public int length() |
普通 |
取得字符串的长度 |
2 |
public boolean isEmpty() |
普通 |
判断是否为空字符串(不是null) |
3 |
public String toLowerCase() |
普通 |
转小写 |
4 |
public String toUpperCase() |
普通 |
转大写 |
5 |
public String trim() |
普通 |
去掉左右空格,但是不去掉中间内容 |
6 |
public String concat(String str) |
普通 |
字符串连接,与“+”一样 |
范例:计算字符串长度
public class StringDemo { public static void main(String args[]) { String str = "士大夫成都市第三,富斗富地方" ; System.out.println(str.length()) ; } }
因为Java使用了Unicode编码,所以中文与英文的长度相同,这一点极大的方便了开发者。
String类中使用的是length()方法,而数组中使用的是“length”属性。
范例:判断是否为空字符串
public class StringDemo { public static void main(String args[]) { String str = "阿斯顿法国和经济,发达是十分" ; System.out.println(str.isEmpty()) ; // false System.out.println("".isEmpty()) ; // true } }
范例:转大、小写操作
public class StringDemo { public static void main(String args[]) { String str = "Hello World !!! (*)*&&^^&*^*^*^*%$&^*(" ; System.out.println(str.toLowerCase()) ; System.out.println(str.toUpperCase()) ; } }
所有字母的内容都发生了转变,但是非字母的内容不会发生改变。
范例:观察trim()方法
public class StringDemo { public static void main(String args[]) { String str = " Hello World " ; System.out.println("字符串内容:【"+str+"】") ; System.out.println("字符串内容:【"+str.trim()+"】") ; } }
范例:字符串连接
public class StringDemo { public static void main(String args[]) { String str = "Hello ".concat("World") ; System.out.println("字符串内容:【"+str+"】") ; // 字符串内容:【Hello World】 } }
基本上开发中不会使用concat()实现字符串的连接,都会使用“+”描述。
非常遗憾的是在整个String类设计的过程之中并没有提供有类似于数据库中的initcap()函数的功能,那么下面可以自己来实现一个首字母大写的操作形式。
范例:实现首字母大写
public class StringDemo { public static void main(String args[]) { String att = "name" ; System.out.println(initcap(att)) ; // Name } public static String initcap(String str) { if (str == null || str.length() == 0) { return str ; } return str.substring(0,1).toUpperCase() + str.substring(1) ; } }
4、总结
No. |
方法名称 |
类型 |
描述 |
1 |
public String(char[] value) |
构造 |
将全部的字符数组作为String的内容 |
2 |
public String(char[] value, int offset, int count) |
构造 |
将部分的字符数组变为字符串,设置字符数组的开始索引与使用个数 |
3 |
public char charAt(int index) |
普通 |
返回指定索引位置上的字符 |
4 |
public char[] toCharArray() |
普通 |
将字符串以字符数组的形式返回 |
5 |
public String(byte[] bytes) |
构造 |
将全部字节数组变为字符串 |
6 |
public String(byte[] bytes, int offset, int length) |
构造 |
将部分字节数组变为字符串 |
7 |
public byte[] getBytes() |
普通 |
将字符串变为字节数组 |
8 |
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException |
普通 |
编码转化 |
9 |
public boolean equals(String anObject) |
普通 |
区分大小写的字符串比较 |
10 |
public boolean equalsIgnoreCase(String anotherString) |
普通 |
不区分大小写的字符串比较 |
11 |
public int compareTo(String anotherString) |
普通 |
比较字符串大小 |
12 |
public int compareToIgnoreCase(String str) |
普通 |
不区分大小写比较字符串大小 |
13 |
public boolean contains(String s) |
普通 |
判断某一个字符串是否存在 |
14 |
public int indexOf(String str) |
普通 |
取得某一个子字符串的索引位置,找不到返回-1 |
15 |
public int indexOf(String str, int fromIndex) |
普通 |
从指定索引位置开始检索子字符串位置,找不到就返回-1 |
16 |
public int lastIndexOf(String str) |
普通 |
从后向前查找指定子字符串的位置,找不到返回-1 |
17 |
public int lastIndexOf(String str, int fromIndex) |
普通 |
从指定位置由后向前查找子字符串的位置,找不到返回-1 |
18 |
public boolean startsWith(String prefix) |
普通 |
判断是否以某个字符串开头 |
19 |
public boolean startsWith(String prefix, int toffset) |
普通 |
从指定位置判断是否以某个字符串开头 |
20 |
public boolean endsWith(String suffix) |
普通 |
是否以指定的字符串结尾 |
21 |
public String substring(int beginIndex) |
普通 |
从指定索引位置截取到结尾 |
22 |
public String substring(int beginIndex, int endIndex) |
普通 |
截取指定索引范围的内容 |
23 |
public String replaceAll(String regex, String replacement) |
普通 |
字符串的全部替换 |
24 |
public String replaceFirst(String regex,String replacement) |
普通 |
替换第一个内容 |
25 |
public String[] split(String regex) |
普通 |
全部拆分 |
26 |
public String[] split(String regex, int limit) |
普通 |
部分拆分 |
27 |
public int length() |
普通 |
取得字符串的长度 |
28 |
public boolean isEmpty() |
普通 |
判断是否为空字符串(不是null) |
29 |
public String toLowerCase() |
普通 |
转小写 |
30 |
public String toUpperCase() |
普通 |
转大写 |
31 |
public String trim() |
普通 |
去掉左右空格,但是不去掉中间内容 |
32 |
public String concat(String str) |
普通 |
字符串连接,与“+”一样 |
相关推荐
Java String 使用详解 Java String 使用详解是 Java 编程语言中最基础也是最重要的一部分,对于 Java 程序员来说,了解 String 类的使用方法是必不可少的。本文将详细介绍 Java String 的使用方法,包括 String ...
在Java编程语言中,`String`类是处理文本字符串的核心工具。它是一个不可变对象,意味着一旦创建,其内容就不能更改。这是因为`String`在Java中被实现为一个特殊的类,存储在一个连续的字符数组中,这个特性对于理解...
5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5.javaString类.zip5....
在JDK1.5中,String类增加了一个非常有用的静态函数format(String format, Objece... argues),可以将各类数据格式化为字符串并输出。其中format参数指定了输出的格式,是最复杂也是最难掌握的一点,而argues则是一...
在Java编程语言中,String类是处理文本字符串的核心类,而与各种进制字符之间的转换是常见的编程需求。本文将详细探讨Java中如何进行String与二进制、八进制、十进制以及十六进制之间的转换。 首先,我们要了解进制...
在Java编程中,String对象和Byte类型的转换是常见的操作,特别是在网络编程中,因为网络通信通常涉及字节流的处理。下面将详细讲解Java中如何进行这两种类型之间的转换,并探讨其在网络编程中的应用。 首先,让我们...
Java中的`String`类是编程中最常用的类之一,它在Java的`java.lang`包中,无需显式导入即可使用。`String`类代表不可变的字符序列,这意味着一旦创建了`String`对象,它的值就不能改变。这个特性使得`String`在处理...
Java中的String对象是编程中经常遇到的关键元素,它在各种场景下都有广泛的应用。下面将详细探讨Java String的十大常见问题及其解决方案。 1. **字符串比较:使用"=="还是equals()?** 在Java中,"=="运算符比较的...
在Java编程中,字符串(String)是非常常见且重要的数据类型。本文主要讨论了如何正确判断Java中的String对象是否为null、空值("")以及它们的地址是否相等。在处理字符串时,了解这些概念对于避免程序出错至关重要。...
日期转换例子,支持含各种语言的三个字母缩写...适用于数据导入数据库String类型中含英文缩写转换,网上普遍使用的String to Date 都不适用含Mon Jul 等缩写,对比API,可以实现任意格式的String 类型转换成Date类型
在Java编程语言中,String和StringBuilder是两个非常重要的类,它们在处理文本字符串时起着核心作用。了解这两个类的特点和使用场景对于提高程序性能至关重要。 首先,`String`类在Java中是不可变的,这意味着一旦...
Java String API 中常用的方法 Java String API 中提供了许多有用的方法来操作字符串,這些方法可以帮助开发者轻松地处理字符串操作。下面是 Java String API 中常用的方法: 一、获取 Java String API 中提供了...
这份"javaString总结共13页.pdf.zip"压缩包文件显然包含了关于Java字符串的深入讲解,覆盖了多个关键知识点。虽然没有提供具体的PDF内容,但我可以基于常见的Java String主题为你概述一些重要的概念。 1. **字符串...
在Java编程语言中,`String`和`StringBuffer`是用来处理文本字符串的两种不同类,它们各有特点并适用于不同的场景。理解它们之间的区别对于优化代码性能至关重要。 首先,`String`类代表的是不可变的字符串。这意味...
Java String 用法详解 字符串是 Java 中最重要的类,了解 String 的用法是 Java 开发者的必备知识。本文将从多个角度介绍 String 的用法,包括字符串的不可变性、字符串常量池、+号和 StringBuilder 等。 字符串的...
在Java编程中,经常需要处理JSON格式的数据,它是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。JSON格式通常用于前后端数据交互,因为其结构清晰,支持复杂的数据结构,如对象(Object)...
Java中的String类是用于表示和操作字符串的基本类,它在Java编程中扮演着至关重要的角色。String类的对象是不可变的,这意味着一旦创建了String对象,就不能改变其内容。这是因为字符串在Java中被视为常量,存储在...
### 有关Java String常用方法的总结 #### 一、String 类概述 `String`类是Java中最基础也是最重要的数据类型之一,在Java中被定义为一个不可变类(immutable class),这意味着一旦一个`String`对象创建之后,其...
"深入理解 Java String#intern() 内存模型" Java String#intern() 内存模型是 Java 语言中一个重要的概念,.string#intern() 方法是 Java 字符串常量池中一个重要的组件。字符串常量池是一个固定大小的 HashMap,桶...