1.字符串中方法的应用
【问题描述】按要求将程序填充完整
class StringExample{
public static void main(String[] args){
String s1 = new String("china");
String s2 = "china";
if( s1.equals(s2) ){ //判断s1和s2串值是否相同
/*
在Java中,s1==s2判断的是s1和s2两个对象的引用是否相同,而不是它们所包含的字符串值是否相同。因此,即使s1和s2包含完全相同的字符串值,但如果它们是由不同的对象引用的,它们仍然被认为是不同的。要比较s1和s2的字符串值是否相同,应该使用s1.equals(s2)方法。这个方法会检查s1和s2所包含的字符串值是否相等。
*/
System.out.println("s1=s2");
}else{
System.out.println("s1!=s2");
}
String s3 = new String("320106199105120467");
if( s3.startsWith("320106") ){ //判断s3的前缀是否是“320106”
System.out.println("JiangShu Nanjing ID");
}
int position = 0;
String path = "d:\\javaKK\\src\\Lesson3\\example.java";
// '\\'转义字符
position = path.lastIndexOf("\\") ; //获取path中最后出现目录分隔符号的位置
System.out.println("\\ last position in path is:"+position);
String fileName = path.substring(22) ; //获取path中的文件名"example.java",22是e在字符串里的index
System.out.println("fileName = "+fileName);
String s4="100";
String s5="123.678";
String s6 = new StringBuffer(s5).reverse().toString(); //将s5反转为"876.321"赋给s6
/*
该行代码将字符串变量 s5 转换成 StringBuffer 对象,然后对其进行翻转(reverse),最后再将翻转后的结果转换成 String 类型并赋值给新的字符串变量 s6。简而言之,该行代码的作用是将字符串 s5 反转,并把反转后的结果存储到 s6 中。
*/
int num1 = Integer.parseInt(s4) ; //将字符串s4转化成int
//"parse" 是英文单词,意思是解析或分析。
double num2 = Double.parseDouble(s6) ; //将字符串s6转化成double
double sum = num1+num2;
System.out.println("sum = "+sum);
String s7 = "ABCDEF";
for(int i=0;i<s7.length();i++){
System.out.print(s7.charAt(i));
}
System.out.print("\n");
char arr[] = s7.toCharArray(); //将s7存放到数组arr中
for(int i=arr.length-1;i>=0;i--){
System.out.printf("%3c",arr[i]);
}
}
}
【输入形式】
无
【输出形式】
s1=s2
JiangShu Nanjing ID
\ last position in path is:21
fileName = example.java
sum = 976.321
ABCDEF
F E D C B A
2.字符串中字符排序
【问题描述】编写一个程序,从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。
【输入形式】用户在第一行输入一个字符串。
【输出形式】程序按照字符(ASCII)顺序从小到大排序字符串,并删除重复的字符进行输出。
【样例输入】badacgegfacb
【样例输出】abcdefg
【样例说明】用户输入字符串badacgegfacb,程序对其进行按从小到大(ASCII)顺序排序,并删除重复的字符,最后输出为abcdefg
import java.util.*;
class StringSort{
public static void main(String[] args){
Scanner reader = new Scanner(System.in);
String str = reader.nextLine();
char[] arr = str.toCharArray();
String news = " ";
Arrays.sort(arr);
String newStr = new String(arr);
news += newStr.charAt(0);
for(int i = 1; i < arr.length; i++)
if(newStr.charAt(i)!= newStr.charAt(i - 1))
news += newStr.charAt(i);
news += "\0";
System.out.println(news);
}
}
3.单词倒转
【问题描述】编写一个程序,将输入的一段文本中的各个单词的字母顺序翻转
【输入形式】一行文本
【输出形式】一行单词倒置后的文本,以 . 结束
【样例输入】
To be or not to be
【样例输出】
oT eb ro ton ot eb.
import java.util.*;
public class Test3
{
public static void main(String[] args)
{
int i;
Scanner input=new Scanner(System.in);
String str=input.nextLine();
String[] words=str.split("\\s+");
StringBuffer str1=new StringBuffer();
for(i=0;i<words.length;i++)
{
StringBuffer str2=new StringBuffer(words[i]);
str2=str2.reverse();
str1.append(str2);
if(i<words.length-1)
str1.append(" ");
else
str1.append(".");
}
System.out.println(str1);
}
}
4.字符串压缩
【问题描述】编程将一个字符串转化(压缩)
【样例输入】
aaaaabbccccccdaa
【样例输出】
a5b2c6d1a2
import java.util.*;
public class Test4 {
public static String stringCompress(String str) {
StringBuilder a = new StringBuilder();
char[] b = str.toCharArray();
char char1 = str.charAt(0);
int count = 1;
for (int i = 1; i < b.length; i++) {
if (char1 == str.charAt(i)) {
count++;
continue;
}
a = a.append(char1).append(count);
count = 1;
char1=str.charAt(i);
}
a = a.append(char1).append(count);
return a.toString();
}
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String str=input.nextLine();
stringCompress(str);
System.out.println(stringCompress(str));
}
}
5.提取子串
【问题描述】从一个串s中提取子串,要求以start字符开始,并以end字符结束的内含子串。(内含串指包含start字符和end字符的串)
【输入形式】两行,第一行是一个给定字符串,第二行是start字符和end字符两个字符构成的字符串
【输出形式】一行以start字符开始,并以end字符结束的内含子串
【样例输入1】
I love <china> and people
<>
【样例输出1】
<china>
【样例输入2】
I love <china> and people
<]
【样例输出2】
<china> and people
【样例输入3】
I love <china> and people
><
【样例输出3】
无
【样例说明】
如果找到了start,而end不存在,则取从start开始到结尾的所有字符,若start不存在,或start在end的后方则返回null
import java.util.*;
public class P3 {
static Scanner in = new Scanner(System.in);
static String delimitedString(String x,char start,char end)
{
String s3="";
for(int i=0;i<x.length();i++)
{
if(x.charAt(i)==start)
{
s3=s3+start;i++;
while(i<x.length()&&x.charAt(i)!=end)
{
s3=s3+x.charAt(i);
i++;
}
if(i<x.length())
{
s3=s3+end;
}
break;
}
if(x.charAt(i)==end) {
break;
}
}
return s3;
}
public static void main(String[] args) {
int n;
String x,mod;
char begin,end;
x = in.nextLine();
mod = in.nextLine();
begin = mod.charAt(0);
end = mod.charAt(1);
String y;
y = delimitedString(x,begin,end);
if(y!=null)
System.out.println(y);
}
}
6.提取多个子串
【问题描述】
从一个串s中提取子串,要求以start字符开始,并以end字符结束的内含子串。(内含串指包含start字符和end字符的串)
【输入形式】
两行,第一行是一个给定字符串,第二行是start字符和end字符两个字符构成的字符串
【输出形式】
所有的内含子串,每个内含子串一行
【样例输入1】
I love <china> and <people> ok
<>
【样例输出1】
【样例输入2】
I love <china> and <people> ok
<]
【样例输出2】
无
【样例说明】
如果start或end不存在,则返回null ,内含子串个数<=1000
import java.util.*;
class P3 {
static Scanner in = new Scanner(System.in);
static String[] delimitedString(String x,char begin,char end)
{
String[] s = new String [1000];
int j,t=0;
for(int i=0;i<x.length();i++)
{
if(begin == x.charAt(i))
{
j = i;
while( j < x.length() && x.charAt(j) != end )
j++;
if(j < x.length()-1)
{
s[t++] = x.substring(i , j+1);
i=j;
}
}
}
return Arrays.stream(s).filter(Objects::nonNull).toArray(String[]::new);
}
public static void main(String[] args) {
int n;
String x,mod;
char begin,end;
x = in.nextLine();
mod = in.nextLine();
begin = mod.charAt(0);
end = mod.charAt(1);
String[] y;
y = delimitedString(x,begin,end);
if(y!=null){
for(int i=0;i<y.length;i++){
System.out.println(y[i]);
}
}
}
}
7.数字串转换
【问题描述】
编写方法把十进制数字串转换为用逗号隔开的数,从右边开始每三个数字之间用一个逗号隔开。
【样例输入】
1543729
【样例输出】
1,543,729
import java.util.*;
class P3 {
static Scanner in = new Scanner(System.in);
static String change(String x)
{
StringBuilder s2 =new StringBuilder();
for(int i=x.length()-1;i>=0;)
{
int j=0;
while(j<3&&i>=0)
{
s2.append(x.charAt(i));
i--;j++;
}
if(i>=0) {
s2.append(",");
}
}
s2.reverse();
x=s2.toString();
return x;
}
public static void main(String[] args) {
String x,y;
x = in.nextLine();
y = change(x);
System.out.println(y);
}
}