目录
1.用数组解决:
例如
当j=3时,a重复那么将后面的元素向前移,然后再缩容数组。
public static void main(String[] args) {
demotext dt=new demotext();
dt.method();
}
public void method(){
System.out.println("输入一个字符串:");
Scanner sc=new Scanner(System.in);
String str=sc.next();
char[] arr={};
for (int i = 0; i <str.length() ; i++) {
arr= Arrays.copyOf(arr,arr.length+1); //数组扩容
arr[i]=str.charAt(i);
}
for (int i = 0; i <arr.length ; i++) {
for (int j = i+1; j <arr.length ; j++) {
if(arr[i]==arr[j]){
for (int k = j; k <arr.length-1; k++) { //将j后面元素都往前移
arr[k]=arr[k+1];
}
j=i; //将j只向i再次寻找剩下与本次i所对应的元素的相同元素
arr=Arrays.copyOf(arr,arr.length-1);
}
}
}
for (char a:arr
) {
System.out.print(a+" ");
}
}
2.标志法:
例如:
a b c a b c b b,我们不妨再创建个数组,这个数组长度与上个数组长度相同,但内容全都为0.则 0 0 0 0 0 0 0 0.然后我们进行循环匹配,当a重复时,则使它对应的下标0数组为1.同理bc也一样。那么会是 a b c a b c b b
0 0 0 1 1 1 1 1
这时光输出0元素所对应的字符就达到取重效果。
//字符逐个输入给数组
System.out.println("输入一个字符串:");
Scanner sc=new Scanner(System.in);
String str=sc.next();
char[] arr={};
for (int i = 0; i <str.length() ; i++) {
arr= Arrays.copyOf(arr,arr.length+1);
arr[i]=str.charAt(i);
}
int[] arr1=new int[arr.length];
for (int i = 0; i <arr1.length ; i++) {
arr1[i]=0;
}
for (int i = 0; i < arr.length ; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
for (int i = 0; i <arr1.length ; i++) {
System.out.print(arr1[i]+" ");
}
//获取arr每个字符找相同为1
for (int i = 0; i < arr.length; i++) {
for (int j = i+1; j < arr.length ; j++) {
if(arr[i]==arr[j]){
arr1[j]=1;
}
}
}
System.out.println();
for (int i = 0; i < arr.length ; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
for (int i = 0; i <arr1.length ; i++) {
System.out.print(arr1[i]+" ");
}
//输出不为1 的字符
System.out.println();
for (int i = 0; i < arr.length ; i++) {
if (arr1[i]==0){
System.out.print(arr[i]);
}
}
}
3.字符串操作
3-1操作
返回一个新字符串,其中所有字母大写 toUpperCase()
返回一个新字符串,其中所有字母小写 toLowerCase()
String str1="jdk";
String str2=str1.toUpperCase(Locale.ROOT);
System.out.println(str2);
获得子字符串str.charAt()
String str1="jdk";
char char1=str1.charAt(1);
System.out.println(char1);
截取从特定位置到最后一个字符 substring()
String str1="jdk";
String str3=str2.substring(1); //左闭右也闭
System.out.println(str3);
String str4=str2.substring(0,2); //左闭右开
System.out.println(str4);
String str = " 我爱 JAVA 编程 "; //获取字符串的长度 int length = str.length(); System.out.println("字符串str的长度是:" + length); //获取字母‘J’在字符串第一次出现的位置 int indexJ = str.indexOf("J"); System.out.println("字母\'J\'在字符串第一次出现的位置:" + indexJ); //获取字母A在字符串最后一次出现的位置 /* String str1="abcabcbb"; int indexA= str1.indexOf("a"); //第一次a出现的位置是0 int indexA2= str1.indexOf("a",1); //从1位置后开始第一次出现a的下标 */ int lastIndexA = str.lastIndexOf('A'); System.out.println("字母\'A\'在字符串最后一次出现的位置:" + lastIndexA); //获取索引为8的字符 char charAt = str.charAt(str.length()-1-1); System.out.println("索引为8的字符是:" + charAt); //trim去字符串前后的空格 String trim = str.trim(); System.out.println("去首尾空格前:" + str); System.out.println("去首尾空格后:" + trim); //需求:去掉字符串中所有的空格,应该用replace方法 String replaceAll = str.replaceAll(" ", ""); System.out.println("去空格前:" + str); System.out.println("去空格后:" + replaceAll);//concat在字符串后面添加指定字符串 String target = "我爱"; String concat = target.concat("铁板桥"); System.out.println(concat);
4.字符串类
字符串的不可变性(地址的引用), String对象一旦被创建则不可修改,是不可变的,所谓的修改是创建了新的对象,所指向的内存空间不变。
4-1构造字符串
创建字符串的几种形式
String str1 = "oracle";
String str2 = new String("oralce");
String str3 = new String();
str3 = "oracle";
String str=new String("内容");
String s1="hello word"; String s2=new String("hello word"); String s3="hello word";
(1.)s1==s2 ?(2).s1==s3 ?
第一个为false,第二个为true。s1和s2内容上是相同的,但是为不同的对象。
4-2字符串的分隔和替换
replace(oldchar: char, new char: char) 将字符串中所有匹配的字符替换成新的字符,然后返回新的字符串。
replace(oldString: String , new String: String) 将字符串中第一个匹配的子字符串替换成新的子字符串,然后返回新的字符串。
replaceAll(oldString: String , new String: String) 将字符串中所有匹配的子字符串替换成新的子字符串,然后返回新的字符串。
split(): 返回一个字符串数组,其中包含被分隔符分隔的子字符串集。
4-3字符串与数组之间的转换
1.tocharArray()方法 例如 将java转换成数组 char[ ] arr="java".toCharArray();(字符转法)
String str = "我爱 JAVA 编程 语言";
char[] arr=str.toCharArray();
for (char a :arr
) {
System.out.print(a+" ");
}
}
2.split方法(字符串转法)
String str = "我爱 JAVA 编程 语言";
//字符串截取成字符串数组
String[] split = str.split(" ");
//System.out.println(Arrays.toString(split));
//[我爱, JAVA, 编程, 语言]
for(String s:split) {
System.out.println(s);
}
3.将字符串转成字节数组
String str = "我爱 JAVA 老师";
byte[] bytes = str.getBytes("UTF-8");
for (int i = 0; i < bytes.length; i++) {
System.out.print(bytes[i] + " ");
}
4-4StringBuilder常用方法
//StringBuilder常用方法
StringBuilder sb = new StringBuilder("Oracle");
//为Oracle后添加Apple,再添加Google
sb.append("Apple").append("Google");
System.out.println(sb);
//当前对象值:OracleAppleGoogle,再Apple和Oracle之间增减IBM
sb.insert(6, "IBM");
System.out.println(sb);
//当前对象值:OracleIBMAppleGoogle,将IBM替换成Alibaba
sb.replace(6, 9, "Alibaba");
System.out.println(sb);
//当前对象值:OracleAlibabaAppleGoogle,删除Apple
sb.delete(13, 18);
System.out.println(sb);
//reverse():将字符串反转输出
StringBuffer sb1 = new StringBuffer("abc");
sb1.reverse();
System.out.println(sb1.toString());