亲历迅雷二面

昨天参加了深圳迅雷的二面:

又有一上机题:

读一文本文件:Search.txt

给定一个字符串

算出给定字符串在Txt文件中出现的次数、每行的偏移量、行号和该行内容:

【60分钟题,只用记事本和JDK工具】

package com.xunlei; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Scanner; public class SearchTxt { public static void main(String[] args) { // 读取要比对的子串 System.out.print("请输入要查找的字符串:"); Scanner scanner = new Scanner(System.in); String subStr = scanner.next(); BufferedReader br = null; try { File file = new File("D:/search.txt"); if (!file.exists()) { file.createNewFile(); } br = new BufferedReader(new InputStreamReader(new FileInputStream( file))); // 定义num int num = 0; // 定义行 int row = 0; // 定义原字符串 String superStr = null; while ((superStr = br.readLine()) != null) { row++; num += findNum(superStr, subStr, row); } System.out.println("子串" + subStr + "在Txt文本中出现的次数:" + num); } catch (Exception e) { } finally { } } public static int findNum(String superStr, String subStr, int row) { char[] ch1 = superStr.toCharArray(); char[] ch2 = subStr.toCharArray(); // 记录次数 int num = 0; for (int i = 0, j = 0; i < ch1.length; i++) { if (ch2[j] == ch1[i]) { j++; if (j == ch2.length) { num++; // 第几行有相同的子串 System.out.println("第" + row + "行:" + superStr); // 偏移量为 System.out.println("偏移量为:" + (i - j + 2)); // i重置为 (i-j+1) i = i - j + 1; // j重置为0 j = 0; } } else { j = 0; } } return num; } }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值