字符串处理:下划线,多空格变单空格,统计单词出现个数

2024-05-06 08:38

本文主要是介绍字符串处理:下划线,多空格变单空格,统计单词出现个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

假设用户输入的字符串只有小写字母,空格和数字,请编写程序对用户输入的串进行处理,规则如下:

  1. 把每个单词的首字母变为大写
  2. 把数字与字母之间用下划线字符”_”分隔开
  3. 把单词间有多个空格的调整为一个空格
  4. 统计处理后的字符串每个单词出现次数

输入: we are we 2family2
输出: We Are We 2_family_2


思路:
1. 难点在于找出单词首字母: “空格+字母”标记为单词首字母.
当然得考虑第一个单词,其属于边界情况,要特殊处理
2. 难点在于如何找出数字和字母相连的情况:索引index和index+1对应的字符分别为a-z和0-9;或0-9和a-z
3. 判断单词间有多个空格:str[index]==’ ‘&&str[index+1]==’ ‘,找到之后,删之.
4. 用hashmap:将每个单词放进hashmap中,统计每个单词出现的次数.


可执行代码:

package bb2;import java.util.ArrayList;
import java.util.Scanner;public class subString {public static void main(String[] args) {// TODO Auto-generated method stubString s=(new Scanner(System.in)).nextLine();ArrayList <Character>list=new  ArrayList<Character>();for(int i=0;i<s.length();i++){list.add(s.charAt(i));}int index=0;while(index+1<list.size()){if(index==0&&list.get(index)>='a'&&list.get(index)<='z'){list.set(index, (char)(list.get(index)-32));}else if((list.get(index)==' ')&&list.get(index+1)==' '){list.remove(index+1);index--;}else if(list.get(index)==' '&&list.get(index+1)>='a'&&list.get(index+1)<='z'){list.set(index+1, (char)(list.get(index+1)-32));}else if(list.get(index)>='0'&&list.get(index)<='9'&&list.get(index+1)>='a'&&list.get(index+1)<='z'){list.add(index+1,'_');index++;} else if(list.get(index+1)>='0'&&list.get(index+1)<='9'&&list.get(index)>='a'&&list.get(index)<='z'){list.add(index+1, '_');index++;}index++;}for(int i=0;i<list.size();i++){System.out.print(list.get(i));}}
}

这篇关于字符串处理:下划线,多空格变单空格,统计单词出现个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963911

相关文章

ReactNavigation 重置路由栈的两种方法 以及SwitchNavigator不处理回退操作

我们在项目中常常有这样的需求 , 给app添加一个广告业/启动页/引导页/登录页等等, 之后进入app的主页面 , 前面的 广告业/启动页/引导页 不提供入口,并且按返回键也不会回到那个页面. 一般我们会跳转到主页之后重置路由,今天提供两种方法来实现. 首先是跳转之后重置路由: //首先导入NavigationActionsimport {NavigationActions} from 'r

关于高版本 Plant Simulation 每次保存是 提示提交comm对话框的处理方法

关于高版本 Plant Simulation 每次保存是 提示提交comm对话框的处理方法 如下图 将model saving history 修改为None即可 关于AutoCAD 2022 丢失模板库的问题 从新从以下地址打开即可: D:\Program Files\Autodesk\AutoCAD 2022\UserDataCache\zh-cn\Template

名为投资实为借贷,如何处理

投资近百万参与号称“高回报、零风险”的内部商铺投资项目,与公司签订商铺投资合同及租赁合同。本想投资商铺收取租金,没想到不仅租金没拿到手,连本金都要不回来。 2019年底,原告何某(乙方)与被告祁东县某公司(甲方)签订《商铺项目内部员工投资合同》,约定:乙方投资甲方开发的商铺项目1栋139房,投资款为97.9万元;本合同签订生效后,乙方投资期满6年后,乙方如需撤资,甲方承诺可按195.8万元整回购

代码随想录算法训练营第五十五天|583. 两个字符串的删除操作,72. 编辑距离

583. 两个字符串的删除操作 只要求出两个字符串的最长公共子序列长度即可,最后用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。 72. 编辑距离 首先是递推公式 1.word1[i-1]==word2[j-1] 也就是说这里不需要变化,直接继承之前的结果即可。dp[i][j]=dp[i-1][j-1] 删除:dp[i][j]=dp[i-1][j]+1; 添加

字符串-将str1编辑成str2所需最小代价(hard)

一、题目描述 二、解题思路 该题目使用动态规划的思想来解决问题 刚开始我还在想,删除+添加的操作可以等价为替换操作,如果替换操作的Cost大于删除+添加组合操作的Cost之和就需要把 rc=dc+ic。 但是在动态规划中,如果对三种不同的操作方式进行比较然后取较小值,不用进行上面的替换操作就可以达到效果,假设i表示指向str2的指针,j表示指向str1的指针,将str1->str2

VS产生sdf和ipch文件太大处理方案

使用VS的人一方面享受着它功能的强大,一方面又十分痛恨他生成的文件占用的空间太大了,硬盘吃不消啊! 一个helloworld程序,用DEV ++也就那么几K,但是用VS就要占到几十M,主要是生成.sdf和ipch文件体积太大了。在网上找了一下也没发现有什么优化的方法,倒是可以将sdf和ipch文件集中到另外一处,然后定期清除,这样节省程序文件的空间。 方法: 工具--》选项--》文本编辑

【Hive SQL 每日一题】统计每月用户购买商品的种类分布

文章目录 测试数据需求说明需求实现 测试数据 -- 创建 orders 表DROP TABLE IF EXISTS orders;CREATE TABLE orders (order_id INT,user_id INT,product_id INT,order_date STRING);-- 插入 orders 数据INSERT INTO orders VALUES

c++ 字符串包含空格判断

//空格判断 //返回0:无空格,返回1:有空格 int IncludeSpace(char *str) { char c; while(1) { c=*str++; if (c == ' ') //如果字符高位为1且下一字符高位也是1则有中文字符 return 1; } return 0; }

c++ 字符串包含中文判断

//中文判断 //返回0:无中文,返回1:有中文 int IncludeChinese(char *str) { char c; while(1) { c=*str++; if (c==0) break; //如果到字符串尾则说明该字符串没有中文字符 if (c&0x80) //如果字符高位为1且下一字符高位也是1则有中文字符 if (*str & 0x80) return 1

找出字符串中出现最多次数的字符以及出现的次数

str.charAt(i) 是JavaScript中获取字符串中特定位置字符的方法,表示获取当前的字符。 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>找出字符串出现最