文章目录
- 一、读题
- 二、思路
- 问题1:
- 解决思路:
- 分割方法:
- 方法1、
- 方法2、
- 三、代码实现:
- 方法1、
- 方法2、
一、读题
题目来源:https://leetcode.cn/problems/number-of-segments-in-a-string/description/
首先看例子,“Hello, my name is
john”里面有5个单词,那么就是Hello, my name is john这5个单词,很明显是由空格进行分割的
二、思路
大思路:由空格进行分割,可以自己定义以空格为分界分割的方法,然后通过循环进行分割,也可以使用JavaString类自带的API进行分割,最终将单词数返回即可
问题1:
首先是分割的问题,因为是以空格为界线进行分割的,那如果碰上多个空格连续在一起应该如何处理?如果空格连续在一起,也就是多个空格连续出现的时候,如果单单是按照空格进行分割的话,大概率会出现空的情况(这里的空并非是null,而是真正意义上的空,就是什么都不存储但是这个存储空间真实存在)
以空格为分界进行分割,当两个空格同时在一起的时候就会出现两个空格都被当成了分界进行分割,从而有空的情况出现。
解决思路:
解决该问题,我们需要在字符串被分割出来了之后,在计算单词数的时候进行判断,只要是被分割出来的“单词”的长度不为0,或者不等于空,那么我们就将其视为单词;如果长度为0,或者等于空,那么该“单词”就不是真正的单词。
将字符串以空格为界线进行分割,并且分割出来的是单词,因此分割出来的肯定是字符串,字符串在为空的情况下,长度肯定是0,或者是使用String重写的equals()方法进行判断,该“单词”是否等于空。
分割方法:
方法1、
我们可以定义一个方法,将字符串和分割界线传进去,在方法里面对字符串进行遍历,如果遇到分割界线就将前面的字符串切割给存储到数组里面,再继续遍历再次遇到空格就再将前面的字符串切割存储到数组里,以此类推。
方法2、
同样也可以使用JavaString类自带的API,使用split(String)方法,用一个String数组进行接收即可。
三、代码实现:
方法1、
public int countSegments(String s) {if(s != null) {//判断s是否为空String[] str = s.split(" ");//使用split()方法分割字符串int count = 0;//定义计数器,如果为真正的单词就加一,为假单词则不变
//遍历Str数组,判断数组内容是否存在假单词for(int i = 0 ; i < str.length ; i++) {if(!str[i].equals("")) {//使用equals()方法判断是否是假单词count++;}}return count;}return 0;}
方法2、
public int countSegments(String s) {if(s != null) {//判断s是否为空String[] str = s.split(" ");//使用split()方法分割字符串int count = 0;//定义计数器,如果为真正的单词就加一,为假单词则不变
//遍历Str数组,判断数组内容是否存在假单词for(int i = 0 ; i < str.length ; i++) {if(str[i].length() != 0) {//通过字符串的长度来判断是否是假单词count++;}}return count;}return 0;}