您的位置:首页 > 编程语言 > Java开发

java学习之路 之 Java常用类-字符串(String)类及练习题

2016-08-20 10:39 337 查看
字符串;
String类:构造字符串对象 
常量对象:字符串常量对象是用双引号括起的字符序列。        
例如:"你好"、"12.97"、"boy"等。
字符串的字符使用Unicode字符编码,一个字符占两个字节
String类较常用构造方法:
String  s1 = new String();
String  s2 = new String(String original);
String  s3 = new String(char[] a);
String  s4 =  new String(char[] a,int startIndex,int count);
String str  = “abc”;与String str1 = new String(“abc”);的区别?

字符串的特性:
String是一个final类,代表不可变的字符序列
字符串是不可变的。一个字符串对象一旦被配置,其内容是不可变的。
判断:String s1 = "atguigu";

String s2 = "java";
String s4 = "java";
String s3 = new String("java");
System.out.println(s2 == s3);//false
System.out.println(s2 == s4);//true
System.out.println(s2.equals(s3));
String s5 = "atguigujava";
String s6 = (s1 + s2).intern();
System.out.println(s5 == s6);//true
System.out.println(s5.equals(s6));//true

字符串对象操作:

     0123456789 11 14  17    21  25 

    "  abcXXXyyyZZZ你好吗?我不好qqq  "

    public int length() // 26
public char charAt(int index) // 获取指定下标处的字符
public char[] toCharArray() // 把字符串转换为真的字符数组
public boolean equals(Object anObject)
public int compareTo(String anotherString)
public int indexOf(String s) // 判断参数中的子串在本字符串中首次出现的下标 indexOf("qqq"):21,indexOf("好"):15, indexOf("坏"):-1
public int indexOf(String s ,int startpoint) //indexOf("qqq", 10):21, indexOf("好", 18):20
public int lastIndexOf(String s) // lastIndexOf("qqq"):21, lastIndexOf("好"):20
public int lastIndexOf(String s ,int startpoint) // lastIndexOf("qqq", 5):-1, lastIndex("好", 17):15
public boolean startsWith(String prefix)//判断当前串是否是以参数中的子串为开始 statsWith("abc"):false,startsWith("  a"):true
public boolean endsWith(String suffix)
public String substring(int start,int end)//截取子串包含开始索引,不包含结束索引,获取子串,[start,end)
public String substring(int startpoint)
public String replace(char oldChar,char newChar) // 替换字符串中的全部老字符为新字符
public String replaceAll(String old,String new)
public String trim() // 去除字符串首尾的空白字符
public String concat(String str) // 连接当前串和参数中的串
public String[] split(String regex) // 把字符串以参数中的子串为切割器, 切割成若干部分 split("好");

字符串与基本数据的相互转化:
字符串转换为基本数据类型
Integer包装类的public static int parseInt(String s):可以将由“数字”字符组成的字符串转换为整型。
类似地,使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法可以将由“数字”字符组成的字符串,转化为相应的基本数据类型。
基本数据类型转换为字符串
调用String类的public String valueOf(int n)可将int型转换为字符串相应的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、
valueOf(boolean b)可由参数的相应类到字符串的转换

字符串与字符、字节数组:
String 类的构造方法:String(char[]) 和 String(char[],int offset,int length) 分别用字符数组中的全部字符和部分字符创建字符串对象 
String类提供了将字符串存放到数组中的方法:
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 
将字符串中的全部字符存放在一个字符数组中的方法:
public char[] toCharArray()     
String(byte[])用指定的字节数组构造一个字符串对象。

String(byte[],int offset,int length) 用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象。

public byte[] getBytes() 方法使用平台默认的字符编码,将当前字符串转化为一个字节数组。

public byte[] getBytes(String charsetName) 使用参数指定字符编码,将当前字符串转化为一个字节数组。

String类练习题:

import org.junit.Test;

/** 字符串 :
* 是内容不可改变的Unicode字符序列
*
* 任何对于字符串内容的改变都将会产生新的字符串对象
*
* 0123456789 11 14 17 21 25
* " abcXXXyyyZZZ你好吗?我不好qqq "
* public int length() // 26
public char charAt(int index) // 获取指定下标处的字符
public char[] toCharArray() // 把字符串转换为真的字符数组
public boolean equals(Object anObject)
public int compareTo(String anotherString)
public int indexOf(String s) // 判断参数中的子串在本字符串中首次出现的下标 indexOf("qqq"):21, indexOf("好"):15, indexOf("坏"):-1
public int indexOf(String s ,int startpoint) //indexOf("qqq", 10):21, indexOf("好", 18):20
public int lastIndexOf(String s) // lastIndexOf("qqq"):21, lastIndexOf("好"):20
public int lastIndexOf(String s ,int startpoint) // lastIndexOf("qqq", 5):-1, lastIndex("好", 17):15
public boolean startsWith(String prefix)//判断当前串是否是以参数中的子串为开始 statsWith("abc"):false, startsWith(" a"):true
public boolean endsWith(String suffix)
public String substring(int start,int end)//截取子串包含开始索引,不包含结束索引,获取子串,[start,end)
public String substring(int startpoint)
public String replace(char oldChar,char newChar) // 替换字符串中的全部老字符为新字符
public String replaceAll(String old,String new)
public String trim() // 去除字符串首尾的空白字符
public String concat(String str) // 连接当前串和参数中的串
public String[] split(String regex) // 把字符串以参数中的子串为切割器, 切割成若干部分 split("好");

*/
public class StringTest {

@Test
public void exer7() {
String string3 = "张三,30,80;李四,40,70;王五,50,90;赵六,60,100";
String[] arr = string3.split(";");
Person[] persons = new Person[arr.length];
for (int i = 0; i < arr.length; i++) {
String[] arr2 = arr[i].split(",");
persons[i] = new Person(arr2[0], Integer.parseInt(arr2[1]), Integer.parseInt(arr2[2]));
}
for (Person person : persons) {
System.out.println(person);
}
}

@Test
public void test6() {
String string = "100,200,300,400,500,600";
String[] arr = string.split(",");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
String string2 = "张三,30,80";
String[] arr2 = string2.split(",");
Person person = new Person(arr2[0], Integer.parseInt(arr2[1]), Integer.parseInt(arr2[2]));
System.out.println(person);
}

//模拟一个trim方法,去除字符串两端的空白字符。
@Test
public void exer4() {
String string = " a ";
int begin = -1;
int end = string.length() - 1;
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i) > 32) {
begin = i;
break;
}
}
for (int i = string.length() - 1; i >= 0; i--) {
if (string.charAt(i) > 32) {
end = i;
break;
}
}
if (begin == -1) {
System.out.println("");
} else {
String result = string.substring(begin, end + 1);
System.out.println(result);
}
}

@Test
public void test5() {
String string = " \n \t\t abcXXXyyyZZZ你好吗?我不好qqq \t\r\n";
System.out.println(string.substring(10, 21));
// 截取从Z开始到末尾
System.out.println(string.substring(11, string.length()));
System.out.println(string.substring(11)); // 和上面的效果一样
String newStr = string.replace(' ', '*');
System.out.println(newStr);
String newStr2 = string.replaceAll("好", "坏");
System.out.println(newStr2);
String newStr3 = string.trim();
System.out.println(newStr3);
String newStr4 = newStr3.concat("100");
System.out.println(newStr4);
}

@Test // 反例
public void test4() {
String string = "abc";
for (int i = 0; i < 10000000; i++) {
string += i;
}
System.out.println(string);
}

/**
* 求短串在长串中出现的次数
* @param string1
* @param string2
* @return
*/
public int getCountOfSubstring(String string1, String string2) {
if (string2.length() > string1.length()) {
String tmp = string1;
string1 = string2;
string2 = tmp;
}
int count = 0;
int index = 0;
while (true) {
// 去尝试查找子串
index = string1.indexOf(string2, index);
if (index == -1) {
break;
}
count++;
index++;
}
return count;
}

@Test
public void exer3() {
/*获取一个字符串在另一个字符串中出现的次数。
比如:获取"ab"在 "abkkcadkabkebfkabkskab"
中出现的次数*/
String string1 = "aaaaa";
String string2 = "aa";
int count = getCountOfSubstring(string2, string1);
System.out.println(count);
}

@Test
public void test3() {
//String(char[] value, int offset, int count)
char[] arr = {'a','b','你','他','嘿','来'};
String string = new String(arr);
System.out.println(string);
String string2 = new String(arr, 2, 3); // 2是开始下标,3是总共的字符数
System.out.println(string2);
String string3 = new String("abcccc");
System.out.println(string3);
String string4 = new String(arr, 0, arr.length);
System.out.println(string4);

}

@Test
public void test2() {
String string = " abcXXXyyyZZZ你好吗?我不好qqq ";
System.out.println(string.length());
System.out.println(string.charAt(18));
System.out.println("--------------------");
for (int i = 0; i < string.length(); i++) {
char ch = string.charAt(i);
System.out.println(ch);
}
// 把字符串变成全部大写的
}

@Test
public void exer2() {
// 把字符串反转成新的字符串
String string = " abcXXXyyyZZZ你好吗?我不好qqq ";
String newStr = "";
for (int i = string.length() - 1; i >= 0; i--) {
newStr += string.charAt(i);
}
System.out.println(newStr);
}

@Test
public void exer22() {
// 把字符串反转成新的字符串
String string = " abcXXXyyyZZZ你好吗?我不好qqq ";
String newStr = "";
for (int i = 0; i < string.length(); i++) {
newStr = string.charAt(i) + newStr;
}
System.out.println(newStr);
}

@Test
public void exer23() {
// 把字符串反转成新的字符串
String string = " abcXXXyyyZZZ你好吗?我不好qqq ";
char[] arr = string.toCharArray();
for (int i = 0; i < arr.length / 2; i++) {
char tmp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = tmp;
}
String newStr = new String(arr);
System.out.println(newStr);
}

@Test
public void exer1() {
// 把字符串变成全部大写的
String string = " abcXXXyyyZZZ你好吗?我不好qqq ";
String newStr = "";
for (int i = 0; i < string.length(); i++) {
char ch = string.charAt(i);
if (ch >= 'a' && ch <= 'z') {
// 变成大写
ch -= 32;
}
newStr += ch;
}
System.out.println(newStr);
}

@Test
public void test1() {
String string = "abc";
string += 100; // string = string + 100;
System.out.println(string);
}
}

public class Person {

private String name;
private int age;
private double weight;

public Person() {
}

public Person(String name, int age, double weight) {
super();
this.name = name;
this.age = age;
this.weight = weight;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public double getWeight() {
return weight;
}

public void setWeight(double weight) {
this.weight = weight;
}

@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", weight=" + weight
+ "]";
}
}

package com.guigu.javase.home;

import org.junit.Test;

public class HomeWork {

@Test
public void work1() {
String path = "D:\\MyWork\\jdk1.7.0_07\\bin;c:\\gtk\\bin;c:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\bin;c:\\gtk\\bin;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\bin\\x86;C:\\Program Files (x86)\\Intel\\OpenCL SDK\\3.0\\bin\\x64;;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\;D:\\MyStudy\\maven\\apache-maven-3.3.9\\bin";
String[] pathArr = path.split(";");
for (String string : pathArr) {
System.out.println(string);
}
}

public String partReverse(String string, int begin, int end) {
String str1 = string.substring(0, begin);
String str2 = string.substring(begin, end);
String str3 = string.substring(end);
str2 = new StringBuilder(str2).reverse().toString();
return (str1 + str2 + str3);
}

@Test
public void work2() {
//将一个字符串进行反转。将字符串中指定部分进行反转。比如将“abcdefg”反转为”abfedcg”
System.out.println(partReverse("abcdefg22222cccc", 3, 6));
}

@Test
public void work3() {
//获取两个字符串中最大相同子串。比如:
String str1 = "abcwerthelloyuiodef";
String str2 = "cvhellobnm";
System.out.println(getMaxSameSub(str2, str1));
}

public String getMaxSameSub(String str1, String str2) {
int maxSubLen = str2.length();
while (maxSubLen > 0) {
for (int i = 0; i + maxSubLen <= str2.length(); i++) {
String subString = str2.substring(i, i + maxSubLen);
if (str1.indexOf(subString) != -1) {
return subString;
}
}
maxSubLen--;
}
return "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: