提问人:Darshit ff 提问时间:9/14/2021 最后编辑:Arvind Kumar AvinashDarshit ff 更新时间:9/15/2021 访问量:373
我们可以从 java 中删除不需要的分隔符吗?
Can we remove unwanted delimiters from java
问:
我希望程序接受输入,从该字符串中删除分隔符,然后重新添加它,然后我稍后可以将其解析为一个对象,但我无法做必要的事情。LocalDate
Scanner darshit = new Scanner(System.in);
String oo = "";
System.out.println("Enter your DOB: ");
String dob = darshit.next();
String[] words = dob.split("\\D");
for (int i = 0; i > words.length; i++) {
oo = oo + words[i];
}
System.out.println(oo);
例如,在将 DOB 输入为 25-06-2008 后,输出应该是 25062008 或 2662008 但而不是这个,我得到一个空行!
答:
用于将输入字符串解析为所需格式的字符串,然后将其格式化为所需格式的字符串。DateTimeFormatter
LocalDate
LocalDate
演示:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner darshit = new Scanner(System.in);
System.out.print("Enter your DOB: ");
String dob = darshit.next();
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("dd[-][/]MM[-][/]uuuu", Locale.ENGLISH);
LocalDate date = LocalDate.parse(dob, dtfInput);
// Output in the default format i.e. LocalDate#toString implementation
// System.out.println(date);
// Output in a custom format
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("ddMMuuuu", Locale.ENGLISH);
String formatted = dtfOutput.format(date);
System.out.println(formatted);
}
}
请注意方括号中的可选模式,这是 .DateTimeFormatter
示例运行:
Enter your DOB: 25-06-2008
25062008
另一个示例运行:
Enter your DOB: 25/06/2008
25062008
从 Trail: Date Time 了解有关现代日期时间 API* 的更多信息。
* 无论出于何种原因,如果你必须坚持使用 Java 6 或 Java 7,你可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请查看通过脱糖提供的 Java 8+ API 和如何在 Android 项目中使用 ThreeTenABP。
评论
DateTimeFormatter
dd[-][/]MM[-][/]uuuu
您可以将 Java Streams 与 Collectors 加入调用一起使用吗?
String value = Arrays.asList(dob.split("\\D")).stream().collect(Collectors.joining());
评论
我自己找到了解决方案
import java.util.Scanner;
import java.time.format.*;
import java.time.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter your DOB: ");
String dateOfBirth = scanner.next();
String dateOfBirth1 = dateOfBirth.replaceAll("\\s", "");
String[] dateOfBirthArray = dateOfBirth1.split("[\\s\\-\\.\\'\\?\\,\\_\\@]+");
int[] dateOfBirthArray1 = new int[dateOfBirthArray.length];
for (int i = 0; i < dateOfBirthArray.length; i++){
dateOfBirthArray1[i] = Integer.parseInt(dateOfBirthArray[i]);
}
int dayDateOfBirth = dateOfBirthArray1[0] , monthDateOfBirth = dateOfBirthArray1[1];
int yearDateOfBirth = dateOfBirthArray1[2];
LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(yearDateOfBirth, monthDateOfBirth, dayDateOfBirth);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
String birthday1 = birthday.format(formatter);
}
}
在我看来,这是最简单的方法,公共编辑可以编辑帖子以使其更清晰
评论
DateTimeFormatter
DateTimeFormatter
String.replaceAll() 和 DateTimeFormatter
private static final DateTimeFormatter DATE_PARSER
= DateTimeFormatter.ofPattern("[-]d-M-u[-]", Locale.ROOT);
private static final DateTimeFormatter DATE_FORMATTER
= DateTimeFormatter.ofPattern("dd-MM-uuuu", Locale.ROOT);
public static void parseAndFormat(String input) {
String adapted = input.replaceAll("\\W+", "-");
System.out.println("Adapted input string: " + adapted);
LocalDate date = LocalDate.parse(adapted, DATE_PARSER);
String formatted = date.format(DATE_FORMATTER);
System.out.println("Formatted: " + formatted);
}
上面的方法解析你的字符串:
parseAndFormat("25-06-2008");
输出:
Adapted input string: 25-06-2008 Formatted: 25-06-2008
它非常宽容用户决定在数字之间使用哪些分隔符,以及它们之前或之后(如果有的话):
parseAndFormat("$5///7 2008 ?");
Adapted input string: -5-7-2008- Formatted: 05-07-2008
工作原理:用一个连字符替换任何非单词字符(除字母 a 到 z 和数字 0 到 9 之外的所有字符)。没有人有兴趣看到改编后的输入字符串,我只是打印它,以便您更好地理解该过程。我用于解析的格式化程序首先和最后一个接受可选的连字符。格式模式中的方括号表示可选部件。它还接受 1 位或 2 位数字的日和月,以及最多 9 位数字的年份。我使用单独的格式化程序进行格式化,因此我可以控制日期和月份以 2 位数字显示,并且之前和之后都没有连字符。input.replaceAll("\\W+", "-")
评论
i < words.length