java实战字符串2:中英字符串相互转换
- 输入字符串为中文拼音号码串或者英文号码串,如果输入是中文拼音号码串则转成英文号码串,如果输入是英文号码串则转成中文号码串。
- 特殊情况是英文号码串会出现Double + 英文数字或者拼音数值。如果是英文则可以正常转换,如果是拼音则返回“ERROR”。
输入为中文拼音数字串(用例保证中文数字串均为数字拼音),或者英文数字串(可能带Double)
输出为输入的 中->英 或 英->中 的转换,如果遇到double+中拼音时输出“ERROR”
输入
YiWuSanJiuSi
输出
OneFiveThreeNineFour
输入
OneFourThreeDoubleZero
输出
YiSiSanLingLing
输入
OneFourThreeDoubleLiu
输出
ERROR
public class Main {
private static String[] en = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
private static String[] zh = {"Ling", "Yi", "Er", "San", "Si", "Wu", "Liu", "Qi", "Ba", "Jiu"};
private static List<String> enArr = Arrays.asList(en); // 这种方式的转的list不能执行追加的操作,否则会抛异常,只用于找下标
private static List<String> zhArr = Arrays.asList(zh); public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<String> arr = strToArr(sc.nextLine());
// 判断是英文转中文还是中文转英文
boolean flag = true;
for (String s : arr) {
if (zhArr.contains(s)) {
flag = false;
break;
}
}
if (flag) { // 英转中
enToZh(arr);
} else {
zhToEn(arr);
}
} // 函数1:将一个字符串按大写首字母分割,并保存到ArrayList中
public static ArrayList<String> strToArr(String s) {
ArrayList<String> arr = new ArrayList<>();
if (s.length() <= 1) {
return arr;
}
int index = 0;
for (int i = 1; i < s.length(); i++) {
char cha = s.charAt(i);
if (cha <= 'Z' && cha >= 'A') {
arr.add(s.substring(index, i));
index = i;
}
if (i == s.length() - 1) {
arr.add(s.substring(index));
}
}
return arr;
} // 函数2:英文转中文
public static void enToZh(ArrayList<String> arr) {
StringBuffer bf = new StringBuffer();
for (int i = 0; i < arr.size(); i++) {
if (arr.get(i).equals("Double")) {
if (zhArr.contains(arr.get(i + 1))) {
System.out.println("ERROR");
return;
} else {
int index = enArr.indexOf(arr.get(i + 1));
bf.append(zh[index]);
bf.append(zh[index]);
i++;
}
} else {
int index = enArr.indexOf(arr.get(i));
bf.append(zh[index]);
}
}
System.out.println(bf.toString());
} // 函数3:中文转英文
public static void zhToEn(ArrayList<String> arr) {
if (arr.contains("Double")) {
System.out.println("ERROR");
return;
}
StringBuffer bf = new StringBuffer();
for (int i = 0; i < arr.size(); i++) {
String cur = arr.get(i);
if (i + 1 < arr.size() && arr.get(i).equals(arr.get(i + 1))) {
bf.append("Double");
} else {
int index = zhArr.indexOf(arr.get(i));
bf.append(en[index]);
}
}
System.out.println(bf);
}
}
java实战字符串2:中英字符串相互转换的更多相关文章
- 动态长度中英字符串显示至固定高度td
w 为td中英字符串区域设置为display:block; height=td_height,并指明td width. <!doctype html> <html lang=&quo ...
- Java去除ArrayList集合中重复字符串的案例
ArrayList去除集合中的字符串重复值 分析: A:创建集合对象 B:添加多个字符串元素 C:创建新集合 D:遍历旧集合,获取得到每一个元素 E:拿着个元素到新集合去找,看有没有 有:不进去 没有 ...
- JS 获取中英字符串字节长度
正则匹配中文字: 这里限定中文字的范围,一般的使用是没什么问题的.如果要求十分严格的话,那么就只能使用更加严谨的代码匹配了 1:/([^\u0000-\u00FF])/g 2:/[^\x00-\xff ...
- php中英字符串截取
<?php @header('Content-type: text/html; charset=UTF-8'); function Ctruncate($str = '', $len = 0, ...
- Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目
一.前言 如果还不了解剧情,请返回第3集的剧情 Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...
- c# 数组 字符串 C#中判断字符串中包含某个字符
string str = "1,2,3,4,5,6,7"; string[] strArray = str.Split(','); //字符串转数组 ...
- Java实战之02Hibernate-03Session中的常用方法
九.Session中的常用方法 1.save方法 都是临时态————>持久态 2.persist方法 作用: 持久化临时态对象. 与save方法的区别: 开始了事务:persist和save没有 ...
- C语言计算字符串数组中每个字符串出现的个数
unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; ; i < ...
- 在字符串S1中删除字符串S2中所包含的字符
/************************************************************************* > File Name: test.c &g ...
- Java实战之03Spring-05Spring中的事务控制(基于AOP)
五.Spring中的事务控制(基于AOP) 1.Spring中事务有关的接口 1.1.明确: JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案 1. ...
随机推荐
- std::shared_ptr 线程安全方面的思考
一直惦记着 std::shared_ptr 线程安全的问题,看了些文章后,又怕过段时间忘记了,遂记录下来 std::shared_ptr 的线程安全问题主要有以下两种: 引用计数的加减操作是否线程安全 ...
- 糟糕,CPU100%了!!!
前言 cpu使用率100%问题,是一个让人非常头疼的问题.因为出现这类问题的原因千奇百怪,最关键的是它不是必现的,有可能是系统运行了一段时间之后,在突然的某个时间点出现问题. 今天特地把我和同事,之前 ...
- 类型别名TypeAlias
from collections.abc import Iterable from typing import TypeAlias FromTo = tuple[str, str] # 3.10之前 ...
- 【Azure Key Vault】.NET 代码如何访问中国区的Key Vault中的机密信息(Get/Set Secret)
问题描述 使用 .NET Azure.Identity 中的 DefaultAzureCredential 认证并连接到Azure Key Vault中, 在Key Vault 的示例中,并没有介绍如 ...
- C笔记(2014-12备份)
Video1: 1-编译器对待全局变量和局部变量的差别.全局变量分配空间是在数据区,局部变量分配在代码区. (比如局部变量 int lo_var = 2;后面的 = 2;是赋值语句,被编译器转化成机器 ...
- 连接微信群、Slack 和 GitHub:社区开放沟通的基础设施搭建
NebulaGraph 社区如何构建工具让 Slack.WeChat 中宝贵的群聊讨论同步到公共领域. 要开放,不要封闭 在开源社区中,开放的一个重要意义是社区内的沟通.讨论应该是透明.包容并且方便所 ...
- mySQL清除数据表数据/删除表
一.sql清空表数据的三种方式: 1.truncate – 删除所有数据,保留表结构,不能撤销还原,速度快 2.delete – 是逐行删除,不适合大量数据删除,速度极慢 3.drop – 删除表,表 ...
- C++ //类模板成员函数类外实现
1 #include <iostream> 2 #include <string> 3 #include<fstream> 4 using namespace st ...
- 虚拟机和开发板之间通过NFS互联
简介 NFS是Network File System的首字母缩写.它是一种分布式协议,使客户端可以访问远程服务器上的共享文件.它允许网络中的计算机之间通过TCP/IP网络共享资源. 配置过程 安装NF ...
- 计算引擎-Presto
概述 参考 高质量: B站:https://mp.weixin.qq.com/s/9_lSIFSw5o8sFC8foEtA7w https://mp.weixin.qq.com/s/NmTaJjE0U ...