描述
计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾)
输入描述:
输入一行,代表要计算的字符串,非空,长度小于5000。
输出描述:
输出一个整数,表示输入字符串最后一个单词的长度。
示例1
输入:
hello nowcoder
复制输出:
8
复制说明:
最后一个单词为nowcoder,长度为8
答案1:单个字符统计
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().trim();
int lengthOfLastWord = lengthOfLastWord(input);
System.out.println(lengthOfLastWord);
}
public static int lengthOfLastWord(String s) {
if (s == null || s.length() == 0)
return 0;
int length = 0;
int i = s.length() - 1;
// Ignore trailing spaces
while (i >= 0 && s.charAt(i) == ' ')
i--;
// Calculate length of last word
while (i >= 0 && s.charAt(i) != ' ') {
length++;
i--;
}
return length;
}
}
对于本题可更简洁
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
lengthOfLastWord(input);
}
public static int lengthOfLastWord(String s) {
if (s == null || s.length() == 0)
return 0;
int length = 0;
for(int i = s.length() - 1;i>=0&&s.charAt(i)!=' ';i--){
length++;
}
System.out.println(length);
return length;
}
}
详解1
1.导入 Scanner 类:导入 java.util.Scanner
包,以便从标准输入(键盘)读取用户输入。
import java.util.Scanner;
2.在 main
方法中获取用户输入:main
方法是程序的入口点,首先创建一个 Scanner
对象用于接收用户输入,并读取一行字符串。然后使用 trim()
方法去除字符串两端的空格。
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().trim();
nextLine()用法
1. 目的:
nextLine()
是Java中Scanner
类提供的方法。- 它主要用于从用户通过键盘或其他输入源输入的读取输入。
2. 读取输入:
- 当调用时,
nextLine()
会读取输入,直到遇到换行符 ('\n'
)。- 它会捕获用户输入的所有字符,直到换行符为止,包括空格在内。
3. 返回值:
- 该方法以
String
的形式返回用户输入。- 返回的字符串包括用户输入的所有字符,直到换行符,但不包括换行符本身。
4. 使用场景:
- 当您希望读取用户输入的整行文本时,
nextLine()
特别有用。- 在处理可能包含空格或跨越多个单词的文本数据时,它通常被使用。
trim()用法
trim()
方法是 Java 字符串类String
提供的一个方法,其主要功能是去除字符串两端的空白字符(空格、制表符、换行符等),并返回去除空白字符后的新字符串。用法:
public class Main { public static void main(String[] args) { String str = " Hello, World! "; String trimmedStr = str.trim(); System.out.println("Original string: \"" + str + "\""); System.out.println("Trimmed string: \"" + trimmedStr + "\""); } }
输出:
Original string: " Hello, World! " Trimmed string: "Hello, World!"
解释:
trim()
方法的调用将去除字符串两端的空白字符。- 原始字符串
" Hello, World! "
的两端包含空格,而去除空白字符后得到的新字符串为"Hello, World!"
。- 注意,
trim()
方法返回的是去除空白字符后的新字符串,并不会修改原始字符串。
3.调用 lengthOfLastWord
方法计算最后一个单词的长度:调用自定义方法 lengthOfLastWord
并传入用户输入的字符串作为参数,获取最后一个单词的长度。
int lengthOfLastWord = lengthOfLastWord(input);
4.输出最后一个单词的长度:使用 System.out.println()
方法将最后一个单词的长度打印到控制台。
System.out.println(lengthOfLastWord);
5.自定义方法 lengthOfLastWord
实现:该方法接受一个字符串作为参数,并返回最后一个单词的长度。
public static int lengthOfLastWord(String s) {
6.检查输入字符串是否为空:首先检查输入的字符串是否为空或长度为 0,若是则直接返回 0。
if (s == null || s.length() == 0)
return 0;
length()用法
length()
方法是 Java 字符串类String
提供的一个方法,用于获取字符串的长度,即字符串中包含的字符个数。用法:
public class Main { public static void main(String[] args) { String str = "Hello, World!"; int length = str.length(); System.out.println("Length of the string: " + length); } }
输出:
Length of the string: 13
解释:
length()
方法返回的是字符串中字符的数量,即字符串的长度。- 在给定的示例中,字符串
"Hello, World!"
的长度为 13,因为它包含了 13 个字符。
7.初始化变量并从字符串末尾开始遍历:初始化一个整型变量 length
用于记录最后一个单词的长度,并初始化一个整型变量 i
作为指针,从字符串末尾开始遍历。
int length = 0;
int i = s.length() - 1;
8.忽略尾部的空格:若字符串末尾有空格,则向前移动指针 i
直到不再是空格为止。
while (i >= 0 && s.charAt(i) == ' ')
i--;
charAt()用法
charAt(i)
是 Java 字符串类String
提供的一个方法,它用于获取字符串中索引位置为i
的字符。用法:
public class Main { public static void main(String[] args) { String str = "Hello, World!"; char ch = str.charAt(7); // 获取索引位置为 7 的字符,即 'W' System.out.println("Character at index 7: " + ch); } }
输出:
Character at index 7: W
解释:
charAt(i)
方法返回的是字符串中索引位置为i
的字符。- 索引位置从 0 开始计数。在给定的示例中,索引位置为 7 的字符是
'W'
,因此输出为'W'
。
9.计算最后一个单词的长度:从指针 i
开始向前遍历字符串,直到遇到空格或字符串的开头。在遍历过程中,累加变量 length
。
while (i >= 0 && s.charAt(i) != ' ') {
length++;
i--;
}
答案2:lastIndexOf()
方法统计空格位置
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine(); // 读取输入并去除两端空格
int length = getLastWordLength(input);
System.out.println(length);
}
// 计算最后一个单词的长度
public static int getLastWordLength(String input) {
int lastSpaceIndex = input.lastIndexOf(' '); // 找到最后一个空格的索引
if (lastSpaceIndex == -1) {
// 如果没有空格,则整个字符串就是最后一个单词
return input.length();
} else {
// 如果有空格,则最后一个单词的长度为字符串长度减去最后一个空格后面的字符数量
return input.length() - lastSpaceIndex - 1;
}
}
}
详解2
- 使用
Scanner
读取一行输入,并去除两端的空格。 - 调用
getLastWordLength()
方法来计算最后一个单词的长度。 - 在
getLastWordLength()
方法中,使用lastIndexOf()
方法找到最后一个空格的索引,然后根据索引位置计算最后一个单词的长度。
lastIndexOf()
是 Java 字符串类String
提供的一个方法,用于查找指定字符在字符串中最后一次出现的位置(索引)。用法:
public class Main { public static void main(String[] args) { String str = "hello world"; int lastIndex = str.lastIndexOf('o'); System.out.println("Last index of 'o': " + lastIndex); } }
输出:
Last index of 'o': 7
解释:
lastIndexOf()
方法接受一个字符作为参数,并返回该字符在字符串中最后一次出现的索引位置。- 如果找到了指定字符,则返回它的索引位置;如果未找到,则返回 -1。
- 在给定的示例中,字符串
"hello world"
中字符'o'
最后一次出现的索引位置是 7,因此输出为 7。
答案3:split()方法分割为单词数组
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine().trim(); // 读取输入并去除两端空格
int length = getLastWordLength(input);
System.out.println(length);
}
// 计算最后一个单词的长度
public static int getLastWordLength(String input) {
// 使用空格分割字符串为单词数组
String[] words = input.split(" ");
// 获取数组最后一个元素即为最后一个单词
String lastWord = words[words.length - 1];
// 返回最后一个单词的长度
return lastWord.length();
}
}
详解3
split()
方法
split()
方法是 Java 字符串类String
提供的一个方法,用于将字符串根据指定的正则表达式进行分割,并返回一个包含分割后的子字符串的数组。用法:
public class Main { public static void main(String[] args) { String str = "hello world"; String[] words = str.split(" "); // 使用空格分割字符串 for (String word : words) { System.out.println(word); } } }
输出:
hello world
解释:
split()
方法接受一个字符串参数,该字符串是一个正则表达式,用于指定分割字符串的规则。- 在给定的示例中,我们使用空格
" "
作为分割字符串的规则,因此split(" ")
将字符串"hello world"
按照空格进行分割,得到包含两个子字符串的数组:["hello", "world"]
。- 分割后的子字符串将存储在一个新的字符串数组中,并作为方法的返回值返回。
- 可以使用
for
循环或其他方法遍历数组中的元素,对每个子字符串进行处理。
Java知识不熟练?欢迎移步Java基础知识速成笔记“超实用”学完就去实战!(一)-CSDN博客