java如何从一个指定的字符串截取相同格式的子字符串

Hi,

我在做一个Web请假(图表操作形式)
老师通过点击表格列选中,表示这个时间请假。
当老师在一周的表格上点了很多下的时候,Jquery通过样式查找得到
老师选中的时间片ID,形如 (1_1,1_2,1_3,3_3,3_4,3_5)这样一个字符串。
这个形式表示老师星期一,1,2,3节课请假,星期三,3,4,5节课请假。
因为我在数据里要插入2条记录。
所以要把(1_1,1_2,1_3,3_3,3_4,3_5)分割成(1_1,1_2)(3_3,3_4,3_5)这2个字符串。
请问有什么好的算法没有?
我的想法:1.分割成数组all[]遍历,把_前的数字找出来。去掉重复,
放到一个临时数组 pre[].
2.创建数组temp[pre.length]。
再双重遍历all[]与pre[],
遍历的时候
if(all[i].startWith(pre[j]))
temp[j]+=all[i]+","
3.最后得到的temp[]就是要的结果?

总感觉有点麻烦。求更好的算法.
joaboo
joaboo 不用这么麻烦,这样就好了.. public static void main(String[] args) { String input = "1_1,1_2,1_3,3_3,3_4,3_5"; Map<String, String> ret = new TreeMap<>(); String key = null; String val = null; for (String str : input.split(",")) { key = str.substring(0, 1); val = ret.get(key); ret.put(key, val == null ? str : val + "," + str); } System.out.println(ret); }
6 年多之前 回复
u014718699
千山飘雪 我的一个实现 : public Map splitChooseLeaveToDay(String ids){ //形如1_2,1_3,1_5,4_1,4_2,4_3分割成(1_2,1<3,1_5),(4_1,4_2,4_3) 两组 String[] all=ids.split(","); List<String> list=new ArrayList<String>(); for(String ss : all){ String pre=ss.substring(0,2); if(!list.contains(pre)) list.add(pre); } //System.out.print(list.toString()); Map res=new HashMap(); for(String ss:all){ for(String kk:list){ if(ss.startsWith(kk)){ res.put(kk, StringUtil.dealNull(res.get(kk))+","+ss); } } } Collection<String> c =res.values(); Iterator it = c.iterator(); for (; it.hasNext();) { String temp=(String)it.next(); System.out.println(temp.substring(1,temp.length())); } return res; }
6 年多之前 回复

3个回答

1.你如果能保证1_X在3_X前面,就声明一个变量,保存截取的第一个字符,如果当前截取的和之前的不一样就说明已经循环到了下一个时间段。这样就能获得你要的结果。
2.如果不能保证,就把截取的第一个字符放到Map中,key就是你的第一个字符,value就是拼接的字符,每次先拿截取的第一个字符串查询Map中的值,有就拼接,没有就添加一个。

u014718699
千山飘雪 对头,1很好,因为我在前台用Array.sort()做了排序。这个效率高些。
6 年多之前 回复

字符串1_1,1_2,1_3,3_3,3_4,3_5分隔为数组,将数据类型为M_N的数据用map来保存,针对你所提出的例子,最终map数据为key:1,value:1,2,3;key:3,value:3,4,5

QiangGe2Dai
QiangGe2Dai O(∩_∩)O~采不采纳无所谓,关键就是要解决问题这才是主要滴。
6 年多之前 回复
u014718699
千山飘雪 Sorry,没办法2个采纳2个答案。兄弟你的表达跟1楼第2钟方法一样, public Map splitChooseLeaveToDay2(String ids){ //形如1_2,1_3,1_5,4_1,4_2,4_3分割成(1_2,1<3,1_5),(4_1,4_2,4_3) 两组 String[] all=ids.split(","); Map<String,String> res=new HashMap<String,String>(); for(String ss:all){ String[] arr=ss.split("_"); res.put(arr[0],StringUtil.dealNull(res.get(arr[0]))+","+ss); } //display Collection<String> c =res.values(); Iterator it = c.iterator(); for (; it.hasNext();) { String temp=(String)it.next(); System.out.println(temp); } return res; }
6 年多之前 回复

这个是有多难啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问