【发布时间】:2019-12-29 10:40:00
【问题描述】:
我遇到这种情况是为了编写一个通用函数,它只能提取第一次出现的字符和字符串中的所有数字。
输入字符串(说):ABC123-45DEF-GH67IJ9
输出字符串:A123-45D-G679
我已经确定了一种方法,但该程序的复杂性很高。这里对我来说有两种不好的情况:
- 我的程序输出不正确。
输出: A123-45D-G679-(这个额外的连字符是下面代码中的问题)。 - 我需要一种更好的方法来以一种不太复杂的方式完成这项工作。
这是我的代码 sn-p:
package Test;
import java.util.LinkedList;
public class FirstLetterAndNumerics {
static void firstLetterAndNumber(String string) {
StringBuffer sb = new StringBuffer();
LinkedList<String> ll = new LinkedList<String>();
String[] str = string.split("-");
boolean flag = true;
for (int i = 0; i < str.length; i++) {
ll.add(str[i]);
}
for (int j = 0; j < ll.size(); j++) {
if (Character.isAlphabetic(ll.get(j).charAt(0))) {
if (flag == false) {
sb.append("-");
}
sb.append(ll.get(j).charAt(0));
for (int k = 1; k < ll.get(j).length(); k++) {
if (Character.isAlphabetic(ll.get(j).charAt(k))) {
flag = false;
} else if (Character.isDigit(ll.get(j).charAt(k))) {
sb.append(ll.get(j).charAt(k));
}
}
sb.append("-");
flag = true;
} else if (Character.isDigit(ll.get(j).charAt(0))) {
sb.append(ll.get(j).charAt(0));
for (int l = 1; l < ll.get(j).length(); l++) {
if (Character.isDigit(ll.get(j).charAt(l))) {
sb.append(ll.get(j).charAt(l));
} else if (Character.isAlphabetic(ll.get(j).charAt(l)) && flag == true) {
sb.append(ll.get(j).charAt(l));
flag = false;
}
}
}
}
System.out.println(sb);
}
public static void main(String[] args) {
firstLetterAndNumber("ABC123-45DEF-GH67IJ9");
}
}
【问题讨论】:
-
删除 sb.append("-");在 if 块内并写在 else bolck if(alphabetcheck){} elseIf(digitcheck){} else{sb.append("-");}
-
@AbhishekMishra:将 else 块添加到附加“-”将不起作用,因为“if”和“else if”块只会获得控制权,“else”块没有其他情况。
标签: java regex string stringbuffer