String mode = "111100111111100011111011";
代表24个小时,1表示有值,0表示无值
想截取成类似这样的结构“00-03”,“06-12”,"16-20","21-23"...
如果是单个值,则截取成类似“04-04”这样,表示4点有值。请大家帮忙写个函数

解决方案 »

  1.   

    看了半天没看懂楼主想要干什么?mode怎么转换?规则是什么?
      

  2.   

    String mode = "111100111111100011111011";
    //00-01
    //03-07
    //11-17
    //20-23是不是转成以上的格式 ?
      

  3.   


    import java.util.ArrayList;
    import java.util.List;public class Test05 {
    private static final String TIME_STR = "111100111111100010111011"; public static void main(String[] args) {
    for (String s : getValues(TIME_STR)) {
    System.out.println(s);
    }
    } public static List<String> getValues(String str) {
    List<String> values = new ArrayList<String>(4);
    int len = str.length();
    for (int i = 0; i < len; i++) {
    char c = str.charAt(i);
    if (c == '1') {
    int start = i++;
    while (i < len && (c = str.charAt(i)) == '1') {
    i++;
    }
    int end = --i;
    values.add(intToString(start) + "-" + intToString(end));
    }
    } return values;
    } public static String intToString(int i) {
    if (i < 10) {
    return "0" + i;
    } else {
    return String.valueOf(i);
    }
    }
    }这样?:00-03
    06-12
    16-16
    18-20
    22-23
      

  4.   


    import java.util.ArrayList;
    import java.util.List;public class Mode { public static String fillStr(int len, String str) { while (str.length() < len) {
    str = "0" + str;
    }
    return str;
    }

    public static List split(String value){

    List list = new ArrayList()  ;
    String bStr = "";
    String eStr = "";
    char arr[] = value.toCharArray();
    for (int i = arr.length - 1; i >= 0; i--) {
    if (arr[i] == '1') {
    if ("".equals(bStr)) {
    bStr = fillStr(2, String.valueOf(23 - i));
    eStr = fillStr(2, String.valueOf(23 - i));
    } else{
    eStr = fillStr(2, String.valueOf(23 - i));
    }
    }else{
    if (!"".equals(bStr) && !"".equals(eStr)){
    list.add(bStr + " - " + eStr) ;
    System.out.println(bStr + " - " + eStr);
    bStr = "" ;
    eStr = "" ;
    }
    }
    }
    if (!"".equals(bStr)){
    list.add(bStr + " - " + eStr) ;
    }
    System.out.println(bStr + " - " + eStr);
    bStr = "" ;
    eStr = "" ;

    return list ;
    } public static void main(String[] args) {
    String mode = "111100111111100011101011"; List list = split(mode) ;
    System.out.println("结果:") ;
    for (int i = 0; i < list.size(); i++) {

    System.out.print(list.get(i) + "   " ) ;
    }
    }
    }
    运行结果:import java.util.ArrayList;
    import java.util.List;public class Mode { public static String fillStr(int len, String str) { while (str.length() < len) {
    str = "0" + str;
    }
    return str;
    }

    public static List split(String value){

    List list = new ArrayList()  ;
    String bStr = "";
    String eStr = "";
    char arr[] = value.toCharArray();
    for (int i = arr.length - 1; i >= 0; i--) {
    if (arr[i] == '1') {
    if ("".equals(bStr)) {
    bStr = fillStr(2, String.valueOf(23 - i));
    eStr = fillStr(2, String.valueOf(23 - i));
    } else{
    eStr = fillStr(2, String.valueOf(23 - i));
    }
    }else{
    if (!"".equals(bStr) && !"".equals(eStr)){
    list.add(bStr + " - " + eStr) ;
    System.out.println(bStr + " - " + eStr);
    bStr = "" ;
    eStr = "" ;
    }
    }
    }
    if (!"".equals(bStr)){
    list.add(bStr + " - " + eStr) ;
    }
    System.out.println(bStr + " - " + eStr);
    bStr = "" ;
    eStr = "" ;

    return list ;
    } public static void main(String[] args) {
    String mode = "111100111111100011101011"; List list = split(mode) ;
    System.out.println("结果:") ;
    for (int i = 0; i < list.size(); i++) {

    System.out.print(list.get(i) + "   " ) ;
    }
    }
    }
      

  5.   

    上面的弄翻啦,以为从右边开始的,仔细一看原来是从左边表示00
    import java.util.ArrayList;
    import java.util.List;public class Mode { public static String fillStr(int len, String str) { while (str.length() < len) {
    str = "0" + str;
    }
    return str;
    }

    public static List split(String value){

    List list = new ArrayList()  ;
    String bStr = "";
    String eStr = "";
    char arr[] = value.toCharArray();
    for (int i = 0 ; i < arr.length ; i++) {
    if (arr[i] == '1') {
    if ("".equals(bStr)) {
    bStr = fillStr(2, String.valueOf(i));
    eStr = fillStr(2, String.valueOf(i));
    } else{
    eStr = fillStr(2, String.valueOf(i));
    }
    }else{
    if (!"".equals(bStr) && !"".equals(eStr)){
    list.add(bStr + " - " + eStr) ;
    System.out.println(bStr + " - " + eStr);
    bStr = "" ;
    eStr = "" ;
    }
    }
    }
    if (!"".equals(bStr)){
    list.add(bStr + " - " + eStr) ;
    }
    System.out.println(bStr + " - " + eStr);
    bStr = "" ;
    eStr = "" ;

    return list ;
    } public static void main(String[] args) {
    String mode = "111100111111100011111011"; List list = split(mode) ;
    System.out.println("结果:") ;
    for (int i = 0; i < list.size(); i++) {

    System.out.print(list.get(i) + "   " ) ;
    }
    }
    }结果:00 - 03
    06 - 12
    16 - 20
    22 - 23
    结果:
    00 - 03   06 - 12   16 - 20   22 - 23  
      

  6.   

    这个问题不是已经解决了吗?String mode = "111100111111100011111011"; 
    Matcher m = Pattern.compile("1+").matcher(mode);//正则查找多个1组成的字符串 
    List<String> result = new ArrayList<String>(); 
    while (m.find()) {//如果能找到正则匹配的字符串 
        result.add(String.format("%02d-%02d", m.start(), m.end()-1)); //追加匹配的开始位置和结束位置 

    System.out.println(result);
      

  7.   

    写成函数import java.util.regex.*;//函数实现
    public static List<String> convert(String mode) {
        Matcher m = Pattern.compile("1+").matcher(mode);//正则查找多个1组成的字符串 
        List<String> result = new ArrayList<String>(); 
        while (m.find()) {//如果能找到正则匹配的字符串 
            result.add(String.format("%02d-%02d", m.start(), m.end()-1)); //追加匹配的开始位置和结束位置 
        } 
        return result;
    }//main函数测试
    String mode = "111100111111100011111011";
    List<String> list = convert(mode);
    System.out.println(list);
      

  8.   


    String mode = "111100111111100011111011";
    Pattern p = Pattern.compile("(1+)|(0+)");
    Matcher m = p.matcher(mode);
    int start = 0;
    int end = 0;
    while (m.find())
    {
    String s = m.group();
    end += s.length();
    if (s.startsWith("1"))
    {
    System.out.println(start + "~" + end);
    }
    start += s.length();
    }
    我写了一个,感觉写得挺简单的~
      

  9.   

    csdn出问题了?怎么出现了2个帖子。我上一个已经结贴了。
    还是感谢大家的热情帮忙.