去掉代码前部编号

今天发先从JavaEye网站上粘贴下来的代码有一些前面会带有编号,在程序中无法使用,如果手动将其编号删除实在是太浪费时间了,所以自己谢了一个简单的程序用来自动去除编号。

1.只要将有编号的代码保存到一个文件中。

2.在程序中指定文件的路径。

3.直接运行就可以将转换好的文件自动保存到原来的文件中(也可以自从新指定路径)

 

主意:两个文件不在同一个包下,用时需要更改

 

package com.cui.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileIO {
 private String filePath;
 private File file = null;
 private FileReader fr = null;
 private FileWriter fw = null;
 private BufferedReader br = null;
 private BufferedWriter bw = null;
 
 public FileIO() {};
 /**
  * 得到指定文件路径
  * @param filePath 指定文件路径
  */
 public FileIO(String filePath) {
  this.filePath = filePath;
 }
 /**
  * 读取指定文件的内容并返回
  * @return 指定文件字内容
  * @throws IOException
  */
 public String readFileToStr() {
  StringBuffer sb = new StringBuffer();
  if(file == null) file = new File(filePath);
  try {
   fr = new FileReader(file);
   br = new BufferedReader(fr);
   String str = "";
   while(str != null) {
    str = br.readLine();
    if(str != null) sb.append("\n"+str);
   }
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }finally {
   close();
  }
  return sb.toString();
 }
 /**
  * 读取指定文件的内容并返回
  * @param filePath 指定文件路径
  * @return 指定文件字内容
  * @throws IOException
  */
 public String readFileToStr(String filePath) {
  this.filePath = filePath;
  return readFileToStr();
 }
 /**
  * 将指定字符串写入指定文件
  * @param str 指定字符串
  * @throws IOException
  */
 public void writeStrToFile(String str) {
  if(file == null) file = new File(filePath);
  try {
   fw = new FileWriter(file);
   bw = new BufferedWriter(fw);
   bw.write(str);
   bw.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }finally {
   close();
  }

 }
 /**
  * 将指定字符串写入指定文件
  * @param str 指定字符串
  * @param filePath 指定文件路径
  * @throws IOException
  */
 public void writeStrToFile(String str,String filePath){
  this.filePath = filePath;
  writeStrToFile(str);
 }
 /**
  * 将所有的i/o流关闭
  */
 public void close() {
  if(br != null) {
   try {
    br.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  if(fr != null) {
   try {
    fr.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  if(bw != null) {
   try {
    bw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
  if(fw != null) {
   try {
    fw.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }
}

package com.cui.tool;

import com.cui.io.FileIO;

public class DeleteNumber {
 public String delNum(String str) {
  int len = str.length(); //得到字符的长度
  char ch1 = ' '; //创建一个相同长度的字符数组
  char ch2 = ' ';
  StringBuffer sb = new StringBuffer();
  
  for(int i=0;i<len-1;i++){
   ch1 = str.charAt(i); //赋值
   ch2 = str.charAt(i+1);
   if(ch1 >=48&&ch1 <= 57 && ch2 >=48&&ch2 <= 57){
    continue;
   }if(ch1 >=48&&ch1 <= 57 &&  ch2 =='.') {
    i += 1;
    continue;
   }else{
    sb.append(ch1);
   }
  }
  return sb.toString();
 }
 public static void main(String[] args) {
  DeleteNumber dn = new DeleteNumber();
  FileIO fio = new FileIO("D://a.txt");
  String str = null;
  str = fio.readFileToStr();
  str = dn.delNum(str);
  fio.writeStrToFile(str);
  
 }
}

#include <iostream> #include <list> #include <stdlib.h> #include <stdint.h> #include <string.h> using namespace std; #ifdef DEBUG_TIMECOST #include <sys/time.h> #endif #ifdef __cplusplus extern "C" { #endif #include "code_filter_recent_repeat.h" #include "log.h" #include "time_measure.h" #ifdef __cplusplus } #endif #ifndef CPPUTEST #define STATIC static #else //单元测试时暴露静态函数 #define STATIC #endif typedef struct code_info{ int codeCharNum; char *pCodeData; struct timespec tsRecord; }CODE_INFO, *CODE_INFO_P; uint32_t mSwitchOn = 1; //功能开关? uint32_t mHistoryTimeMs = 2 * 1000; //比对的历史记录时间,重复的码记录时间最新的 uint32_t mMaxHistoryCodeNum = 10; STATIC std::list<CODE_INFO *> mHistoryCodesList; //最近出现过的n个码 STATIC int is_code_repeat(int srcCodeCharNum, char* pSrcCodeStr, int dstCodeCharNum, char* pDstCodeStr); // int code_repeated_recent_filter_module_set_onoff(uint32_t _onoff) { mSwitchOn = 0; if (0 != _onoff) { mSwitchOn = 1; } SF_LogDebug("HistoryFilter onoff = %d", mSwitchOn); return 0; } int code_repeated_recent_filter_module_set_delay_ms(uint32_t _historyTimeMs/*delayMs*/) { //时间限定为 if (_historyTimeMs < 0) { _historyTimeMs = 0; } if (_historyTimeMs > 120000) { _historyTimeMs = 120000; } mHistoryTimeMs = _historyTimeMs; SF_LogDebug("HistoryFilterrecord keep time = %d ms", mHistoryTimeMs); return 0; } int code_repeated_recent_filter_module_set_history_num( uint32_t _maxHistoryCodeNum) { if (_maxHistoryCodeNum < 1) { _maxHistoryCodeNum = 1; } else if (_maxHistoryCodeNum > 50) { _maxHistoryCodeNum = 50; } mMaxHistoryCodeNum = _maxHistoryCodeNum; SF_LogDebug("HistoryFilter RecordNum = %d", mMaxHistoryCodeNum); return 0; } //相同返回1,不同返回0 STATIC int is_code_repeat(int srcCodeCharNum, char* pSrcCodeStr, int dstCodeCharNum, char* pDstCodeStr) { int i; char *pSrc, *pDst; if (srcCodeCharNum != dstCodeCharNum) return 0; //字符数不同 pSrc = pSrcCodeStr + srcCodeCharNum - 1;//读码的前缀一般相同,因此从尾部比较更优 pDst = pDstCodeStr + dstCodeCharNum - 1; for (i = 0; i < srcCodeCharNum; i++) { if (*(pSrc--) != *(pDst--)) { return 0;//某一字符不同 } } return 1;//字符相同 } //删除过期的历史记录,不把他们作为判断重复的比较对象,即只与近期一定时间内的码进行判断是否重复的比较 int code_repeated_module_del_out_of_date_record(struct timespec tsNow) { std::list<CODE_INFO *>::iterator itor; CODE_INFO *pCode; long timedif; //从历史记录时间到现在的时间差 uint32_t i = 0; //打印与第几个重复时使用 if ((!mSwitchOn) || (0 == mHistoryTimeMs)) { //SF_LogDebug("switch is off"); return 0; } //SF_LogDebug("@ %ld s: %ld ns, Before find out-of-date, History list size = (%d)", tsNow.tv_sec, tsNow.tv_nsec, mHistoryCodesList.size()); //删除过多的比较对象 while(mHistoryCodesList.size() > mMaxHistoryCodeNum) { //SF_LogDebug("release front oldest !!"); itor = mHistoryCodesList.begin(); pCode = (CODE_INFO *)(*itor); mHistoryCodesList.pop_front(); if (pCode != NULL) { if (pCode->pCodeData != NULL){ free(pCode->pCodeData); } free(pCode); } } //删除队列前部时间超期的历史记录 for (i = 0; i < mMaxHistoryCodeNum; i++) { itor = mHistoryCodesList.begin(); //erase可能会破坏迭代器,所以每次重新获取一下 if (itor == mHistoryCodesList.end()) { break; } pCode = (CODE_INFO *)(*itor); timedif = clock_timediff_ms(pCode->tsRecord, tsNow); //SF_LogDebug("element[%d], record @ %ld s: %ld ns, tDiff = %dms(thres = %dms)", i, pCode->tsRecord.tv_sec, pCode->tsRecord.tv_nsec, timedif, mHistoryTimeMs); //SF_LogDebug(" code[%d] (%d): %s", i, pCode->codeCharNum, pCode->pCodeData); if (timedif > mHistoryTimeMs) { //SF_LogDebug("out of date, delte (%d): %s", pCode->codeCharNum, pCode->pCodeData); mHistoryCodesList.erase(itor); if (pCode != NULL) { if (pCode->pCodeData != NULL){ free(pCode->pCodeData); } free(pCode); } } else { break; } } //SF_LogDebug("after delelte out-of-date, History list size = (%d)", mHistoryCodesList.size()); return 0; } //该码是否与近期一段时间内的码重复,不能重复输出(备注:noread也不需要输出) 2022-03-18 by XiongYong, LiuHailin //1-重复 //非1,不重复 int is_code_repeated_with_n_recent(int srcCodeCharNum, char* pSrcCodeStr, struct timespec tsNow) { std::list<CODE_INFO *>::iterator itor; int i = 0; //打印与第几个码重复时需要这个编号 CODE_INFO *pCode; //int isRepeat = 0; if ((!mSwitchOn) || (0 == mHistoryTimeMs)) { //SF_LogDebug("switch is off"); return 0; } //SF_LogDebug("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); //SF_LogDebug("srcCodeChar (%d): %s", srcCodeCharNum, pSrcCodeStr); for (itor = mHistoryCodesList.begin(); itor != mHistoryCodesList.end(); ++itor) { pCode = (CODE_INFO *)(*itor); //SF_LogDebug("history code[%d] (%d): %s, record @ %d s: %d ns", i, pCode->codeCharNum, pCode->pCodeData, pCode->tsRecord.tv_sec, pCode->tsRecord.tv_nsec); if (is_code_repeat(srcCodeCharNum, pSrcCodeStr, pCode->codeCharNum, pCode->pCodeData)) { //SF_LogDebug("!!! repeated !!"); //SF_LogDebug("repeated with history code[%d] (%d): %s\n", i, pCode->codeCharNum, pCode->pCodeData); //isRepeat = 1; break;//重复,但是先不返回,而是跳到下面去登记最新时间,实现"一直不拿走,一直不输出" return 1;//直接返回,不更新码的登记时间,实现“一直不拿走,在delayTime后能被允许重复输出” } i++; } //为新的登记项目腾出地方 if (mHistoryCodesList.size() >= mMaxHistoryCodeNum) { itor = mHistoryCodesList.begin(); pCode = (CODE_INFO *)(*itor); mHistoryCodesList.pop_front(); if (pCode != NULL) { if (pCode->pCodeData != NULL){ free(pCode->pCodeData); } free(pCode); } } //记录新出现的这个码,插入到队尾 pCode = (CODE_INFO *)malloc(sizeof(CODE_INFO)); if (pCode == NULL){ return 0; } pCode->pCodeData = (char*)malloc(srcCodeCharNum + 1);//+1 for '\0' if (pCode->pCodeData == NULL){ free(pCode); return 0; } memcpy(pCode->pCodeData, pSrcCodeStr, srcCodeCharNum + 1); pCode->codeCharNum = srcCodeCharNum; pCode->tsRecord = tsNow; mHistoryCodesList.push_back(pCode); return 0; }/////识别一下这个文件中的头文件添加是否需要删除一些非必要的。自定义头文件不要管
最新发布
11-08
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值