思路: ①使用缓冲流(BufferedReader)读取文件,定义初始行号为0。
②遍历文件每一行并判断,包含则将行号和行内容存入hashMap中,行号作为key,行内容作为value.最后遍历hashMap即可
下面是实现的代码:
package com.sgl.io;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
public class FileFindString {
public static void findStringInFile(String fileName, String subStr)
throws Exception {
BufferedReader br = new BufferedReader(new FileReader(fileName));
Map<Integer, String> res = new HashMap<>();
int lineNum = 0; //记录行号
String line;
while ((line = br.readLine()) != null) {
lineNum++;
// 第一种:contains
// if (line.contains(subStr)) {
// res.put(lineNum, line);
//``}
// 第二种:indexOf
if(line.indexOf(subStr)!=-1){
res.put(lineNum, line);
}
}
//遍历hashMap,key为行号,value为字符串
if (res.isEmpty()) {
System.out.println("文件【" + fileName + "】中没有【" + subStr + "】子串");
} else {
Iterator<Entry<Integer, String>> it = res.entrySet().iterator();
while (it.hasNext()) {
Entry<Integer, String> entry = it.next();
System.out.println("第" + entry.getKey() + "行:\t"
+ entry.getValue());
}
}
br.close();
}
public static void main(String[] args) throws Exception {
findStringInFile("test1.txt", "time");
}
}
N阶平面魔方:
import java.util.Scanner;
public class MoFang {
public static void main(String[] args) {
System.out.println("输入行(列)数:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] a = new int[n][n];
int i = 0;
int j = n / 2;
//算法精要
for (int k = 1; k <= n * n; k++) {
a[i][j] = k;
if (k % n == 0) {
i = (i + 1) % n;
} else {
i = (i - 1 + n) % n;
j = (j + 1 ) % n;
}
}
for (int k = 0; k < a.length; k++) {
for (int r = 0; r < a[k].length; r++) {
System.out.print(a[k][r] + "\t");
}
System.out.println();
}
}
}
单链表
目录
1.单链表反转
6.有个二级单链表,其中每个元素都含有一个指向一个单链表的指针。
写程序把这个二级链表称一级单链表。
8.判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?
11.用链表模拟大整数加法运算
12.单链表排序
13.删除单链表中重复的元素
这些题目在面试中经常出现,所以在这个专题中总结一下,
我所使用的代码都是C/C++。
会写一些思路,这样就不必看代码了。
冰冻三尺,非一日之寒,让我们慢慢来练习吧。
链表的节点定义如下:
用结构体定义,而不是用类。
从使用的方便来说,类要更好一些,
但是为了和其他关于链表的地方保持一致还是使用了结构体来定义。
节点元素为char型,是为了输出和调试方便。
注:这些题目都是前人总结的。
总结:
1,使用指针时,一定要检查指针是否为空;
2,要考虑特殊情况,如指针为空,空链表(只有表头结点),只有一个结点等;
3,插入,删除,交换等操作时都需要使用当前结点的前驱,需要同时记录下来;
4,单链表有无环以及交叉链表求相交结点的两个题目有很大的联系,
也是经常考的题目,有些题目可以转化成这类题目;
5,递归思想很重要,在链表的倒序输出,反转,模拟大数相交,
快速排序中都有用到,分治算法往往需要用递归来做;
6,快慢指针的思想很重要,常数时间删除结点的算法也很考察智力
http://blog.csdn.net/huangxy10/article/details/8010810