题目描述
  1. 输入字符串为中文拼音号码串或者英文号码串,如果输入是中文拼音号码串则转成英文号码串,如果输入是英文号码串则转成中文号码串。
  2. 特殊情况是英文号码串会出现Double + 英文数字或者拼音数值。如果是英文则可以正常转换,如果是拼音则返回“ERROR”。
解答要求时间限制:1000ms, 内存限制:256MB
输入

输入为中文拼音数字串(用例保证中文数字串均为数字拼音),或者英文数字串(可能带Double)

输出

输出为输入的 中->英 或 英->中 的转换,如果遇到double+中拼音时输出“ERROR”

样例1

输入

YiWuSanJiuSi

输出

OneFiveThreeNineFour
样例 2

输入

OneFourThreeDoubleZero

输出

YiSiSanLingLing
样例 3

输入

OneFourThreeDoubleLiu

输出

ERROR
备注:当中文转英文时,如果是LiuLiu情况需要转换成DoubleSix
 
解析:
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:中英字符串相互转换的更多相关文章

  1. 动态长度中英字符串显示至固定高度td

    w 为td中英字符串区域设置为display:block; height=td_height,并指明td width. <!doctype html> <html lang=&quo ...

  2. Java去除ArrayList集合中重复字符串的案例

    ArrayList去除集合中的字符串重复值 分析: A:创建集合对象 B:添加多个字符串元素 C:创建新集合 D:遍历旧集合,获取得到每一个元素 E:拿着个元素到新集合去找,看有没有 有:不进去 没有 ...

  3. JS 获取中英字符串字节长度

    正则匹配中文字: 这里限定中文字的范围,一般的使用是没什么问题的.如果要求十分严格的话,那么就只能使用更加严谨的代码匹配了 1:/([^\u0000-\u00FF])/g 2:/[^\x00-\xff ...

  4. php中英字符串截取

    <?php @header('Content-type: text/html; charset=UTF-8'); function Ctruncate($str = '', $len = 0, ...

  5. Java归去来第4集:java实战之Eclipse中创建Maven类型的SSM项目

    一.前言 如果还不了解剧情,请返回第3集的剧情          Java归去来第3集:Eclipse中给动态模块升级 二.在Eclipse中创建Maven类型的SSM项目 2.1:SSM简介 SSM ...

  6. c# 数组 字符串 C#中判断字符串中包含某个字符

    string str = "1,2,3,4,5,6,7";            string[] strArray = str.Split(','); //字符串转数组      ...

  7. Java实战之02Hibernate-03Session中的常用方法

    九.Session中的常用方法 1.save方法 都是临时态————>持久态 2.persist方法 作用: 持久化临时态对象. 与save方法的区别: 开始了事务:persist和save没有 ...

  8. C语言计算字符串数组中每个字符串出现的个数

    unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; ; i < ...

  9. 在字符串S1中删除字符串S2中所包含的字符

    /************************************************************************* > File Name: test.c &g ...

  10. Java实战之03Spring-05Spring中的事务控制(基于AOP)

    五.Spring中的事务控制(基于AOP) 1.Spring中事务有关的接口 1.1.明确: JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计业务层的事务处理解决方案 1. ...

随机推荐

  1. Swoole从入门到入土(16)——WebSocket服务器[事件]

    WIKI: 问:websocket协议虽然和http协议不同,但是兼容于http协议,如何判断客户端连接使用的是http协议? 答:通过使用 $server->connection_info($ ...

  2. Git合并固定分支的某一部分至当前分支

    在 Git 中,通常使用 git merge 命令来将一个分支的更改合并到另一个分支.如果你只想合并某个分支的一部分代码,可以使用以下两种方法: 1.批量文件合并 1.1.创建并切换到一个新的临时分支 ...

  3. ORACLE查询优化及gather_plan_statistics hint

    查询优化手段和gather_plan_statistics hint: 在10g以后我们可以通过利用gather_plan_statistics提示来了解更多的SQL执行统计信息,具体使用方法如下: ...

  4. Spring源码之bean的加载

    目录 1. FactoryBean 的使用 2. 缓存中获取单例 bean: 3. 从 bean 实例获取对象, 4. 获取单例 bean (从缓存加载失败): 5. 创建 bean (createB ...

  5. kafka学习笔记01-kafka简介和架构介绍

    一.kafka介绍 kafka 最开始是 Linkedin 用来处理海量的日志信息,后来 linkedin 于 2010 年贡献给了 Apache 基金会并成为了顶级项目. 后来开发 kafka 的一 ...

  6. SQL Server使用常见问题

    普通分页查询 三种方式: Top Not IN 方式:查询靠前的数据较快 ROW_NUMBER() OVER()方式:查询靠后的数据速度比上一种较快,在老版本的SQL Server中最常使用 offs ...

  7. vue实现导出word文档(含多张图片)

    vue实现导出word文档(含多张图片) 转自: https://www.pudn.com/news/62e1e14e55398e076bea2d2f.html

  8. 高效的PDF文字提取技术

    无论是行政法规.学术论文还是企业合同,PDF文档为我们提供了一种便捷.稳定的信息传递方式.然而,从PDF文件中提取文本信息对于数据分析.内容编辑等后续处理来说至关重要. PDF文本提取技术是一种可以从 ...

  9. 使用ConfuserEx代码混淆工具保护你的.NET应用程序

    前言 .NET应用如何防止被反编译?这个对于我们.NET开发而言是一个值得关注和重视的问题,防止应用程序被反编译的手段有很多本文我们主要讲讲如何使用ConfuserEx .NET开源免费的代码混淆工具 ...

  10. 2024年,提升Windows开发和使用体验实践 - 终端&命令行篇

    前言 经过前面的铺垫,终于继续更新了,这个大概率是本系列近期的最后一篇了. 同时之前有些内容更新,我也补充到这一篇里面. 关于 scoop 管理器的补充 scoop 常用命令 scoop help # ...