平沢唯丶 2022-04-12 13:22 采纳率: 100%
浏览 94
已结题

java二进制数据的切割和数量计算

这段对二进制数据切割的代码是对一整串二进制数据按规则切割。连续1遇0切割,连续0遇1切割,带X的用规则切割。可以加个计算出切割后以1开头的字符串和以0开头的字符串的数量的代码吗。

import java.io.;
public class aa {
/
*
* 在源数据中将指定字符替换成最后的数字
* @param sourceData
* @param repalceChar
* @param index
* @return
*/
public static String replaceDataFromTail(String sourceData, String repalceChar,int index) {
if (!sourceData.substring(index, index + 1).equals(repalceChar)) {
return sourceData.replaceFirst(repalceChar, sourceData.substring(index, index+1));
}
if (sourceData.substring(index, index + 1).equals(repalceChar)&& (index== sourceData.length()-1)) {
return sourceData.replaceFirst(repalceChar, sourceData.substring(index, index+1));
}
return replaceDataFromTail(sourceData, repalceChar,index+1);
}

/**
 * 在源数据中用前面的数字替换指定字符
 * @param sourceData
 * @param repalceChar
 * @param index
 * @return
 */
public static String replaceDataFromHead(String sourceData, String repalceChar,int index) {
    if (index> sourceData.length()-1) {
        return  sourceData;
    }
    if (!sourceData.substring(index,index+1).equals(repalceChar)) {
        return sourceData;
    }
    String prevOneChar= "";
    String prevTwoChar= "";
    String prevThreeChar= "";
    switch (index)
    {
        case 0:
            break;
        case 1:
            prevOneChar = sourceData.substring(index - 1, index);
            sourceData = sourceData.replaceFirst(repalceChar, prevOneChar);
            sourceData = replaceDataFromHead(sourceData, repalceChar, index + 1);

            break;
        case 2:
            prevOneChar = sourceData.substring(index - 1, index);
            prevTwoChar= sourceData.substring(index-2, index-1);
            if(prevOneChar.equals(prevTwoChar)) {
                sourceData = sourceData.replaceFirst(repalceChar, prevOneChar);
                sourceData = replaceDataFromHead(sourceData, repalceChar, index + 1);
            }
            else
            {
                return replaceDataFromTail(sourceData,repalceChar,index);
            }

            break;

        default:{
            prevOneChar = sourceData.substring(index - 1, index);
            prevTwoChar= sourceData.substring(index-2, index-1);
            prevThreeChar= sourceData.substring(index-3, index-2);
            if ((!prevThreeChar.equals(prevTwoChar)|| prevTwoChar.equals(prevOneChar))&&(!prevOneChar.equals(repalceChar)))
            {
                sourceData= sourceData.replaceFirst(repalceChar, prevOneChar);
                sourceData= replaceDataFromHead(sourceData,repalceChar,index+1);
            }
            else
            {
                return replaceDataFromTail(sourceData,repalceChar,index);
            }
        }
    }
    return sourceData;
}
/**
 *  根据规则拆分指定字符串
 * @param sourceData
 * @return
 */
public static String splitData(String sourceData, String repalceChar)
{
    String tmpData= "";
    int startIndex= -1;
    for (int index=0;index< sourceData.length();index++){
        if (sourceData.substring(index,index+1).equals(repalceChar)) {
            sourceData= replaceDataFromHead(sourceData,repalceChar,index);
        }
        if (startIndex==-1) {
            startIndex = index;
            continue;
        }
        if (!sourceData.substring(index,index+1).equals(sourceData.substring(index-1,index)))
        {
            tmpData= tmpData+" "+ sourceData.substring(startIndex,index+1);
            startIndex= -1;
        }
    }
    if (startIndex!= -1)
    {
        tmpData= tmpData+" "+ sourceData.substring(startIndex,sourceData.length());
    }
    return tmpData;
}
  • 写回答

2条回答 默认 最新

  • 溪风沐雪 2022-04-12 14:21
    关注

    没太理解题意,你的代码我执行了一下,没太看明白,
    比如输入二进制字符串:111100011010101011,
    输出的是 11110 001 10 10 10 10 11,
    按我理解应该是:1111 000 11 0 1 0 1 0 1 0 11吧,然后计算其中包含0和1的字符串数量,你先看一下我理解的有问题吗

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月20日
  • 已采纳回答 4月12日
  • 创建了问题 4月12日

悬赏问题

  • ¥15 求全国交通咨询模拟代码,要求如下,可以完全在dev c++运行
  • ¥15 根据要求修改程序编码
  • ¥15 用 Python 做一个用 Excel 表导入的答题系统
  • ¥15 使用微信开发者工具实现一个“婚博会”小程序
  • ¥15 ros的rviz仿真机器人
  • ¥15 关于#linux#的问题(输入输出错误):出现这个界面接着我重新装系统,又让修电脑的师傅帮我扫描硬盘(没有问题)用着用着又卡死(相关搜索:固态硬盘)
  • ¥15 cv::resize不同线程时间不同
  • ¥15 web课程,怎么做啊😭没好好听课 根本不知道怎么下手
  • ¥15 做一个关于单片机的比较难的代码,然后搞一个PPT进行解释
  • ¥15 python提取.csv文件中的链接会经常出现爬取失败