71 A. 单词过长
直译版解释
有时,像 localization 或 internationalization 这样的单词太长了,以至于在一个文本中多次书写非常烦人。我们考虑把一个超过 10 个字符的过长的单词都用一个特殊的缩写来代替。
这个缩写像这样:我们保留单词的首字母和尾字母,在它们之间,我们写上首尾字母之间的字母数量。该数字采用十进制系统,不包含任何前导零。
因此,localization 将被缩写为 l10n,internationalization 将被缩写为 i18n。
太长的单词应该被缩写所取代,不太长的单词不应该进行任何的更改。
人话版解释
当一个单词超过 10 个字符时,只保留首字母和尾字母,中间使用单词长度 – 首字母 – 尾字母作为长度数值,即单词长度 – 2。
输入
第一行包含一个整数 n(1 ≤ n ≤ 100)。以下 n 行中,每行都包含一个单词。所有单词都由小写拉丁字母组成,长度为 1 到 100 个字符。
输出
输出 n 行。第 i 行应包含从输入数据替换第 i 个单词的结果。
样例输入
4 word localization internationalization pneumonoultramicroscopicsilicovolcanoconiosis
样例输出
word l10n i18n p43s
关键逻辑
遍历每一行的单词:
如果单词长度不超过 10 个字符,则保持原样输出;
如果单词长度超过 10 个字符,则输出单词的缩写,缩写为 首字母 + (单词长度 – 2) + 尾字母。
代码
import java.io.BufferedReader; import java.io.InputStreamReader; public class WayTooLongWords { public static void main(String[] args) throws Exception { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); int num = Integer.parseInt(reader.readLine()); String[] strings = new String[num]; for (int i = 0; i < num; i++) { strings[i] = reader.readLine(); } for (int i = 0; i < num; i++) { String str = strings[i]; char[] strArr = str.toCharArray(); if (strArr.length <= 10) { continue; } int cnt = strArr.length - 2; strings[i] = (strArr[0] + "") + cnt + (strArr[strArr.length - 1] + "") + ""; } for (String str : strings) { System.out.println(str); } } }