前言:
1) 操作场景是编程中的边沿处理
2) 思想: 把不同的地方经过处理变成逻辑上相同的, 长和if结合使用
3) 分类有两种:
上式:预先补齐,使得没有边沿的区别。
下式:事后修正,先放任结果中的边沿瑕疵,最后修理它
扫描二维码关注公众号,回复:
619238 查看本文章
案例:
package day1; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class cutflush { /** * 一刀切 */ public static void main(String[] args) { pyramid4(); } // 做法1 虾米级 public static void pyramid1(){ List list = new ArrayList(); String testStr = "abc ttt,kmd,uuu xyz"; String[] subs0 = testStr.split(" "); for(int i=0; i<subs0.length; i++){ String subs1 = subs0[i]; String[] subs10 = subs1.split(","); for(int j=0; j<subs10.length; j++){ list.add(subs10[j]); } } String[] arrys = (String[]) list.toArray(new String[list.size()]); //Arrays.toString(arrys) System.out.println(Arrays.toString(arrys)); } /** * 一刀切之上式:预先补齐 * 0 用逗号或空格分隔的串,提取出各个部分 * 1 观察发现除了xyz外每个字符串后都跟着一个特殊字符,或者空格 * 2 将最后的字符串xyz后面也跟上,或者空格,保证处理所有字符串特征一致(--->这就是预先补齐表达的含义) */ public static void pyramid2(){ String testStr = "abc ttt,kmd,uuu xyz"; String tempStr = ""; testStr += ","; for(int i=0; i<testStr.length(); i++){ char tempChar = testStr.charAt(i) ; if(tempChar == ' ' || tempChar == ','){ System.out.println(tempStr); tempStr = ""; }else{ tempStr += testStr.charAt(i) ; } } } /** * 一刀切之下式:事后修正法 ---> 先放任结果中的边沿瑕疵,最后修理它 * 0 将字符串用,分隔并输出 */ public static void pyramid3(){ String testStr = "abcttt"; StringBuilder sb = new StringBuilder(); for(int i=0; i<testStr.length(); i++){ char tempChar = testStr.charAt(i); sb.append(",").append(tempChar); } String result = sb.substring(1, sb.length()); System.out.println(result); } /** * 一刀切之上式:通话时间案例 * 某个用户的开始通话时间为: 12:38:15 结束通话时间为: 12:39:16 则该用户通话时长为:62秒 对于一般的情况,可能需要考虑:跨分钟,跨小时,跨零点的问题。 */ public static void pyramid4(){ String s1 = "23:59:9"; String s2 = "00:59:8"; int hour; if (Integer.valueOf(mySplit(s2).get(0)) < Integer.valueOf(mySplit(s1).get(0))) { hour = 24 + Integer.valueOf(mySplit(s2).get(0)) - Integer.valueOf(mySplit(s1).get(0));// 跨零点时+24 } else { hour = Integer.valueOf(mySplit(s2).get(0)) - Integer.valueOf(mySplit(s1).get(0)); } int min = Integer.valueOf(mySplit(s2).get(1)) - Integer.valueOf(mySplit(s1).get(1)); int sec = Integer.valueOf(mySplit(s2).get(2)) - Integer.valueOf(mySplit(s1).get(2)) + 1; System.out.println("hour: " + hour + " min: " + min + " second: " + sec); int time = hour * 60 * 60 + min * 60 + sec; System.out.println("通话时间长度为:"+time+"s"); String ans = ""; if(hour>0){ if(min > 0){ if(sec > 0){ ans=hour+"小时"+min+"分"+sec+"秒"; }else{ min = min -1; sec = sec + 60; ans=hour+"小时"+min+"分"+sec+"秒"; } }else{ hour = hour - 1; min = min + 60; if(sec > 0){ ans=hour+"小时"+min+"分"+sec+"秒"; }else{ min = min -1; sec = sec + 60; ans=hour+"小时"+min+"分"+sec+"秒"; } } } System.out.println(ans); } public static List<String> mySplit(String s) { List<String> list = new ArrayList<String>();//建立List存放时间 String t = "";//临时字符串 s += ":";//一刀切上式 for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == ':') { list.add(t);//加入到list t = ""; } else { t += c; } } return list; } }