如何移除字符串数组元素的末尾字符?日期格式转换技术求助
嘿,这个需求我帮你搞定!结合你的Android开发场景,给你两个实用的方案,直接就能用到你的MainActivity里:
方案一:字符串直接分割(简单高效,适合固定格式)
因为你的字符串格式是固定的"日期 - 时间",直接按分隔符" - "分割取前半部分就行,代码写起来超简单:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 模拟你的原始日期时间列表 ArrayList<String> originalDateTimeList = new ArrayList<>(); originalDateTimeList.add("11 04 2017 - 12:45:54"); originalDateTimeList.add("05 09 2024 - 18:20:00"); // 存储提取后的纯日期列表 ArrayList<String> dateOnlyList = new ArrayList<>(); // 遍历原始列表,分割提取日期 for (String dateTimeStr : originalDateTimeList) { // 按" - "分割字符串,取第一个元素就是日期 String dateStr = dateTimeStr.split(" - ")[0].trim(); dateOnlyList.add(dateStr); } // 可以打印日志验证结果 for (String date : dateOnlyList) { Log.d("MainActivity", "提取的日期:" + date); } } }
注:trim()是为了防止字符串前后意外出现空格,让结果更严谨。如果你的原始字符串绝对没有多余空格,也可以去掉。
方案二:日期格式化解析(健壮可靠,推荐)
如果担心未来字符串格式可能有变化(比如分隔符空格数量调整、时间格式微调),用日期格式化工具解析会更稳妥,还能处理异常情况:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<String> originalDateTimeList = new ArrayList<>(); originalDateTimeList.add("11 04 2017 - 12:45:54"); originalDateTimeList.add("05 09 2024 - 18:20:00"); ArrayList<String> dateOnlyList = new ArrayList<>(); // 定义原始格式和目标格式 SimpleDateFormat inputFormat = new SimpleDateFormat("dd MM yyyy - HH:mm:ss", Locale.getDefault()); SimpleDateFormat outputFormat = new SimpleDateFormat("dd MM yyyy", Locale.getDefault()); for (String dateTimeStr : originalDateTimeList) { try { // 解析字符串为Date对象 Date date = inputFormat.parse(dateTimeStr); // 格式化为纯日期字符串 String dateStr = outputFormat.format(date); dateOnlyList.add(dateStr); } catch (ParseException e) { // 处理解析失败的情况(比如格式错误的字符串) e.printStackTrace(); dateOnlyList.add("无效日期"); // 可以替换成你需要的默认值 } } // 验证结果 for (String date : dateOnlyList) { Log.d("MainActivity", "提取的日期:" + date); } } }
Android 8.0+ 更优写法
如果你的App只适配Android 8.0(API 26)及以上版本,推荐用java.time包下的工具类,它是线程安全的,比SimpleDateFormat更可靠:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ArrayList<String> originalDateTimeList = new ArrayList<>(); originalDateTimeList.add("11 04 2017 - 12:45:54"); originalDateTimeList.add("05 09 2024 - 18:20:00"); ArrayList<String> dateOnlyList = new ArrayList<>(); DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd MM yyyy - HH:mm:ss", Locale.getDefault()); DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd MM yyyy", Locale.getDefault()); for (String dateTimeStr : originalDateTimeList) { try { LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, inputFormatter); String dateStr = localDateTime.format(outputFormatter); dateOnlyList.add(dateStr); } catch (DateTimeParseException e) { e.printStackTrace(); dateOnlyList.add("无效日期"); } } // 验证结果 for (String date : dateOnlyList) { Log.d("MainActivity", "提取的日期:" + date); } } }
总结一下:如果格式绝对固定,方案一足够高效;如果要兼顾健壮性和扩展性,方案二或者Android 8.0+的写法更合适。
内容的提问来源于stack exchange,提问作者Roxby
相关产品推荐
相关产品推荐

