字符串使用split没有反应

本文介绍了一个关于使用Java进行字符串分割的问题实例。问题在于使用管道符(|)作为分隔符时未能正确分割字符串,原因是管道符作为一个特殊字符需要进行转义。通过修改代码使用转义字符,最终实现了字符串的正确分割。

String dnms = new String("275,1,|236,1,|241,1,|242,1,|228,1,|240,1,|  ");

String[] per = dnms.split("|");

这句代码执行之后per还是一个字符串类型,并没有被划分成功。

后来突然想到“|”是一个特殊字符,需要用转义字符转义。

改为String[] per = dnms.split("\\|");就行了


感谢你的反馈! 你提到 **“明细页面的今天、本月记录没有反应”**,说明: > ✅ 页面渲染了 > ❌ 但统计数据(今天收入/支出、本月收入/支出)未正确计算或显示 --- ## 🔍 问题定位 从代码逻辑来看,`summary` 数据是通过 `loadBills()` 中的遍历和条件判断生成的。如果 **今天/本月数据不更新**,常见原因有以下几种: ### ✅ 常见原因分析: | 可能原因 | 是否常见 | 检查方式 | |--------|---------|--------| | `bill.date` 格式错误(如 `2025-4-3` 而非 `2025-04-03`) | ⭐⭐⭐⭐ | 打印日志看格式 | | 时间比较逻辑出错(字符串 vs Date 对象) | ⭐⭐⭐ | 使用 `.toISOString()` 不一致 | | 缓存数据为空或未保存成功 | ⭐⭐⭐⭐ | 检查 `wx.getStorageSync('bills')` | | `date.split(' ')[0]` 失败(日期字段为 null) | ⭐⭐⭐ | 加空值判断 | | 数据更新但 UI 未刷新(setData 失败) | ⭐⭐ | 看控制台是否有警告 | --- ## ✅ 解决方案:增强时间解析 + 容错处理 我们来 **全面修复 `loadBills()` 函数中的时间处理部分**,确保即使格式不标准也能正确识别。 --- ### ✅ 修改 `/pages/detail/detail.js` 中的 `loadBills` 方法(关键修复) ```js loadBills(category = '') { this.setData({ loading: true }); const rawBills = wx.getStorageSync('bills') || []; const now = new Date(); const todayStr = now.toISOString().split('T')[0]; // '2025-04-05' const thisMonth = todayStr.slice(0, 7); // '2025-04' let todayIncome = 0, todayExpense = 0; let monthIncome = 0, monthExpense = 0; const billsWithExtra = rawBills.map(bill => { // ✅ 安全提取 date 字段,兼容各种格式 let dateStr = ''; if (!bill.date) { dateStr = ''; // 无日期 } else if (typeof bill.date === 'string') { dateStr = bill.date.trim().split(' ')[0]; // 取出日期部分 } else if (bill.date instanceof Date) { dateStr = bill.date.toISOString().split('T')[0]; } else { dateStr = String(bill.date).split(' ')[0]; } // ✅ 统一格式化为 YYYY-MM-DD(补零) const parts = dateStr.split('-'); if (parts.length === 3) { const [y, m, d] = parts; dateStr = `${y}-${m.padStart(2, '0')}-${d.padStart(2, '0')}`; } const time = bill.date ? String(bill.date).split(' ')[1]?.substring(0, 5) || '—' : '—'; // 判断是否是今天 / 本月 const isToday = dateStr === todayStr; const isThisMonth = dateStr.startsWith(thisMonth); // 累加统计 const amount = Number(bill.amount) || 0; if (isToday) { if (bill.type === '收入') todayIncome += amount; else todayExpense += amount; } if (isThisMonth) { if (bill.type === '收入') monthIncome += amount; else monthExpense += amount; } return { ...bill, icon: ICON_MAP[bill.category] || ICON_MAP.默认, time, translateX: 0 }; }); const filtered = category ? billsWithExtra.filter(b => b.category === category) : billsWithExtra; const grouped = this.groupBillsByDate(filtered); // ✅ 确保保留两位小数 this.setData({ groupedBills: grouped, selectedCategory: category, loading: false, summary: { todayIncome: todayIncome.toFixed(2), todayExpense: todayExpense.toFixed(2), monthIncome: monthIncome.toFixed(2), monthExpense: monthExpense.toFixed(2) }, triggered: false }); }, ``` --- ### ✅ 同时检查 `groupBillsByDate` 的日期提取是否安全 ```js groupBillsByDate(rawBills) { const now = new Date(); const today = now.toISOString().split('T')[0]; const yesterday = new Date(now - 86400000).toISOString().split('T')[0]; const groups = { today: { dateLabel: '今天', bills: [] }, yesterday: { dateLabel: '昨天', bills: [] }, earlier: { dateLabel: '更早', bills: [] } }; rawBills .sort((a, b) => { // 安全排序 const da = a.date ? new Date(a.date) : 0; const db = b.date ? new Date(b.date) : 0; return db - da; // 降序 }) .forEach(bill => { let dateStr = ''; if (bill.date) { dateStr = String(bill.date).split(' ')[0]; } if (dateStr === today) { groups.today.bills.push(bill); } else if (dateStr === yesterday) { groups.yesterday.bills.push(bill); } else { groups.earlier.bills.push(bill); } }); return Object.values(groups).filter(g => g.bills.length > 0); } ``` --- ## ✅ 验证方法:添加调试日志 在 `onShow()` 或 `loadBills()` 开头加: ```js console.log('原始账单:', wx.getStorageSync('bills')); ``` 然后在开发者工具中查看: - 是否有数据? - `date` 字段是不是 `"2025-4-3 12:30"` 这种缺零的?→ 我们的补丁已支持自动修正 --- ## ✅ 示例:一条合法账单结构 ```json { "id": "123", "amount": "50.00", "type": "支出", "category": "餐饮", "date": "2025-04-05 12:30:00" } ``` 如果你存的是: ```json "date": "2025-4-5 12:30" // 缺少前导零 ``` 也没关系,我们的新代码会统一转成 `2025-04-05` 来比对。 --- ## ✅ 强制测试:手动插入一条今日账单 临时加一段测试代码验证统计功能: ```js // 在 loadBills 最前面加(测试完删除) /* wx.setStorageSync('bills', [{ id: 'test', amount: '100', type: '收入', category: '工资', date: new Date().toISOString().replace('T', ' ').slice(0, 19) // 当前时间 }]); */ ``` 再刷新页面,看看是否显示: > 📅 今天 -¥0.00 +¥100.00 如果是 → 说明功能正常,只是你之前的数据日期不对。 --- ## ✅ 最终建议 ### ✅ 1. 清除旧数据重新记一笔(最简单) ```js // 在开发者工具 Console 输入: wx.clearStorageSync() ``` 然后回到首页记一笔账,再进明细页看统计是否出来。 ### ✅ 2. 检查首页记账时 `date` 是否正确保存 确保你在 `/pages/index/index.js` 中保存账单时用了完整格式: ```js const now = new Date(); const date = now.getFullYear() + '-' + String(now.getMonth()+1).padStart(2, '0') + '-' + String(now.getDate()).padStart(2, '0') + ' ' + String(now.getHours()).padStart(2, '0') + ':' + String(now.getMinutes()).padStart(2, '0'); ``` --- 现在你应该能看到: ✅ 正确的今天收入/支出 ✅ 正确的本月收入/支出 ✅ 即使日期格式不规范也能识别 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值