题目描述
  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. spring boot使用自带缓存

    项目地址:https://gitee.com/indexman/spring_boot_in_action 下面就介绍一下如何使用spring boot自带的缓存.按步骤来操作即可,不懂的可以去看项目 ...

  2. AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验

    AI与人类联手,智能排序人类决策:RLHF标注工具打造协同标注新纪元,重塑AI训练体验 在大模型训练的 RLHF 阶段,需要人工对模型生成的多份数据进行标注排序,然而目前缺乏开源可用的 RLHF 标注 ...

  3. 【LeetCode二叉树#02】二叉树层序遍历(广度优先搜索),十合一专题

    二叉树层序遍历(广度优先搜索) 102 二叉树的层序遍历 力扣题目链接(opens new window) 给你一个二叉树,请你返回其按 层序遍历 得到的节点值. (即逐层地,从左到右访问所有节点). ...

  4. 【LeetCode哈希表#4】梦开始的地方:两数之和(map),以及关于容器map的一些代码技巧

    两数之和 力扣题目链接(opens new window) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种 ...

  5. 在 C++ 项目中,通过源码使用 PaddlePaddle 实现 OCR 功能

    My-PaddleOCR 介绍 如何在 C++ 项目中,通过源码使用 PaddlePaddle 实现 OCR 功能. 本项目的所有源码:gitee: paddleocr 目前,官方提供使用 Paddl ...

  6. C++ STL 容器 list类型

    C++ STL 容器 list类型 list对于异常支持很好,要么成功,要么不会发生什么事情 以下是 std::list 在异常处理方面表现良好的几个原因: 动态内存管理:std::list 使用动态 ...

  7. Java 设计模式简介

    设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是众多软 ...

  8. 010 editor 文件指纹分析

    1.010 Editor  介绍 16进制编辑器,支持模板和脚本操作,010编辑器支持编辑的文件类型 https://www.sweetscape.com/010editor/repository/t ...

  9. XAF Blazor FilterPanel 布局样式

    从上一篇关于ListView布局样式的文章中,我们知道XAFBlazor是移动优先的,如果想在PC端有更好的用户体验,我们需要对布局样式进行修改.这篇介绍在之前文章中提到的FilterPanel,它的 ...

  10. Lock wait timeout exceeded; try restarting transaction-Mysql报错

    一.问题由来 现在在做一个小程序的后台,使用Java写的,数据库使用的Mysql,之前一直调试的时候都好好的,今天在调试的时候突然就报一个错: ### Error updating database. ...