写一个方法trim去掉一个字符串中单词间多余的空格,使得相邻两个单词间有且只有一个空格。 例如当输入字符串是"Hello!_ _Game_programming_ _world!"时,调用该方法后字符串变为"Hello!_Game_programming_world!"。("_"表示空格)
时间: 2023-05-11 18:05:26 浏览: 175
以下是一个可能的实现:
```python
def trim(s):
words = s.split()
return ' '.join(words)
```
这个方法首先将字符串按空格分割成单词列表,然后再用单个空格将它们连接起来。这样就可以去掉多余的空格,只留下相邻两个单词间的一个空格。
相关问题
如果用到split时字符串中间有两个空格,输出时但又不想要空格怎么办
当你需要从字符串中按某个分隔符(例如默认的空格)切分成数组,但希望去除多余的空格时,可以使用Java的`String.split()`方法结合一些额外处理。这个方法会返回一个字符串数组,每个元素都是原始字符串分割后的部分。
如果你想去除数组中的连续空格,可以在分割后对结果数组进行迭代,利用`trim()`方法去掉两端的空格,并且检查相邻元素之间是否有空格,如果有就直接删除或替换为空。下面是一个简单的示例:
```java
String str = "这是 两个 空格 之间的 文本";
String[] parts = str.trim().split("\\s+"); // 使用正则表达式 "\s+" 来匹配一个或多个空格
// 遍历并处理数组
for (int i = 0; i < parts.length; i++) {
if (i > 0 && parts[i].isEmpty()) { // 检查是否是连续的空元素
parts[i] = parts[i - 1]; // 删除空元素,如果必要的话,也可以直接设置为 ""
}
}
// 输出去除了多余空格的数组
for (String part : parts) {
System.out.print(part + " "); // 这里你可以选择保留一个空格作为分隔,也可以直接打印
}
```
Tom教授正在给研究生讲授一门关于基因的课程,有一件事情让他颇为头疼:一条染色体上有成千上万个碱基对,它们从0开始编号,到几百万,几千万,甚至上亿。 比如说,在对学生讲解第1234567009号位置上的碱基时,光看着数字是很难准确的念出来的。 所以,他迫切地需要一个系统,然后当他输入12 3456 7009时,会给出相应的念法: 十二亿三千四百五十六万七千零九 用汉语拼音表示为 shi er yi san qian si bai wu shi liu wan qi qian ling jiu 这样他只需要照着念就可以了。 你的任务是帮他设计这样一个系统:给定一个阿拉伯数字串,你帮他按照中文读写的规范转为汉语拼音字串,相邻的两个音节用一个空格符格开。 注意必须严格按照规范,比如说“10010”读作“yi wan ling yi shi”而不是“yi wan ling shi”,“100000”读作“shi wan”而不是“yi shi wan”,“2000”读作“er qian”而不是“liang qian”。java代码量最少
以下是Java代码实现:
```java
import java.util.*;
public class Main {
private static final String[] PINYIN = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
private static final String[] UNIT = {"", "Shi", "Bai", "Qian", "Wan", "Shi", "Bai", "Qian", "Yi"};
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String num = scanner.nextLine();
String result = readNumber(num);
System.out.println(result);
}
private static String readNumber(String num) {
StringBuilder sb = new StringBuilder();
int len = num.length();
int left = 0, right = len - 1;
while (left <= right) {
if (num.charAt(left) == '0') {
left++;
continue;
}
if (num.charAt(right) == '0') {
sb.append(" ling");
right--;
continue;
}
sb.append(getPinyin(num.charAt(left) - '0')).append(" ").append(UNIT[right]);
left++;
right--;
}
return sb.toString().trim();
}
private static String getPinyin(int digit) {
return PINYIN[digit];
}
}
```
思路如下:
1. 定义一个字符串数组 `PINYIN` 存储汉语拼音;
2. 定义一个字符串数组 `UNIT` 存储数字位数对应的单位;
3. 从输入读取数字字符串 `num`;
4. 定义一个 StringBuilder `sb` 存储转换后的汉语拼音;
5. 使用双指针 `left` 和 `right` 遍历数字字符串 `num`,从左右两端开始扫描;
6. 若左指针 `left` 指向的数字为 0,则跳过;
7. 若右指针 `right` 指向的数字为 0,则在结果字符串 `sb` 中加上“ling”;
8. 否则,在结果字符串 `sb` 中加上左指针 `left` 指向的数字对应的汉语拼音和右指针 `right` 对应的数字位数的单位;
9. 左右指针分别向中间移动,直到两指针相遇或左指针超过右指针;
10. 返回结果字符串 `sb`。
阅读全文