POI--HSSFCell类
- 用POI创建单元格,使用「HSSFCell」类
该类包含三个构造方法。
protected HSSFCell(Workbook book, Sheet sheet, int row, CellValueRecordInterface cval)
protected HSSFCell(Workbook book, Sheet sheet, int row, short col)
protected HSSFCell(Workbook book, Sheet sheet, int row, short col, int type)
同之前一样,虽然有三个构造方法,但都是protected类型的,所以直接用构造方法创建单元格行不通,只能通过行来创建单元格。
- 创建单元格
在一个工作表里创建一个单元格,必须用「HSSFRow」类的「createCell」方法。
使用方法如下:
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell((short)2);
- 读取现有单元格
要读取某一行现有的单元格,使用「HSSFRow」类的「getCell」方法』。
使用方法如下:
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.getRow(0);
HSSFCell cell = row.getCell((short)2);
- 行里创建单元格
下面来看看如何在取得现有行或者在新创建的行里,再创建一个单元格。用POI来创建的话,使用「HSSFRow」类的「createCell」方法。
public HSSFCell createCell(short column):
(short column)创建指定列号的单元格。列号和行号一样,也是从0开始数的。创建的单元格以「HSSFCell」类的对象返回,关于「HSSFCell」类的介绍,我们放在下面几章进行。
package linkin; import java.io.FileOutputStream;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class Linkin
{
public static void main(String[] args)
{
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(1);//创建序号为1的行,第2行 HSSFCell cell = row.createCell(2);//创建序号为2的单元格,第二行第3格
cell.setCellValue("test");//写入test FileOutputStream out = null;
try
{
out = new FileOutputStream("sample.xls");
workbook.write(out);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
out.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
} }
- 读取单元格
如果要从现有的行里取得某一个单元格,POI提供了「HSSFRow」类的「getCell」方法。
public HSSFCell getCell(short cellnum):
(short cellnum)取得指定列号的单元格。如果是不存在的单元格,会返回「null」。
package linkin; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class Linkin
{
public static void main(String[] args)
{
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(1);//创建第二行 HSSFCell cell = row.createCell((short) 2);//创建第二行第三格
cell.setCellValue("test");//第二行第三格写入test for (int i = 0; i < 3; i++)
{
HSSFCell c = row.getCell((short) i);
if (c == null)
{
System.out.println("第" + i + "列单元格不存在");
}
else
{
System.out.println("第" + i + "列单元格获取成功");
}
}
} }
- 读取有值的Excel表格
package linkin; import java.io.FileInputStream;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class Linkin
{
public static void main(String[] args)
{
FileInputStream in = null;
HSSFWorkbook workbook = null; try
{
in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
workbook = new HSSFWorkbook(fs);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
} HSSFSheet sheet = workbook.getSheetAt(0);//取得第一张sheet
HSSFRow row = sheet.getRow(1);//第2行 for (int i = 0; i < 3; i++)
{
HSSFCell c = row.getCell((short) i);
if (c == null)
{
System.out.println("第" + i + "列单元格不存在");
}
else
{
System.out.println("第" + i + "列单元格取得成功");
System.out.println("单元格的值:" + c.getStringCellValue());//getStringCellValue()取得单元格的值
}
}
} }
- POI向单元格写入值
前面介绍了如何用POI获取单元格的值,这一节介绍如何用POI向单元格里设定值。和之前获取值一样,对于不同类型的值,写入的方法也是不同的。
值 方法
boolean setCellValue(boolean value)
date setCellValue(java.util.Calendar value)
date setCellValue(java.util.Date value)
numeric setCellValue(double value)
string setCellValue(java.lang.String value)
方法名称相同,但参数类型不同,这样的方法有5个。关于日期型的方法,有Calender型和Date型两种。
当然,POI也可以写入Error值和计算式。
值 方法
error value setCellErrorValue(byte value)
Formula setCellFormula(java.lang.String formula)
先统一看一下各种方法的Doc文档说明吧。
setCellValue(boolean value)
写入boolean型使用「setCellValue(boolean value)」方法。
1,public void setCellValue(boolean value)如果对象单元格不是boolean型的话,则自动转换为boolean型写入。
2,public void setCellValue(java.util.Calendar value)写入Calendar型使用「setCellValue(java.util.Calendar value)」方法。 Calendar型的值是作为数值型写入的,如何想表示为日期型的话,需要做格式转换处理。如果对象单元格不是数值型的话,则自动转换为数值型写入。
3,public void setCellValue(java.util.Date value)写入Date型使用「setCellValue(java.util.Date value)」方法。 Date型的值是作为数值型写入的,如何想表示为日期型的话,需要做格式转换处理。如果对象单元格不是数值型的话,则自动转换为数值型写入。
4,public void setCellValue(double value)写入数值型使用「setCellValue(double value)」方法。 如果对象单元格不是数值型的话,则自动转换为数值型写入。
5,public void setCellValue(java.lang.String value)写入字符串型使用「setCellValue(java.lang.String value)」方法。 注意:要写入中文等文字的话,必须要先使用「setEncoding」方法进行转换。如果对象单元格不是字符串型的话,则自动转换为字符串型写入。还有,如果写入的值是”null”的话,则单元格为空白。
6,setCellErrorValuepublic void setCellErrorValue(byte value)写入Error型使用「setCellErrorValue(byte value)」方法。 如果对象单元格不是Error型的话,则自动转换为Error型写入。
7,public void setCellFormula(java.lang.String formula)写入计算式使用「setCellFormula」方法。 写入计算式方法的参数虽然是字符串,但Doc文档里一点说明也没有。
package linkin; import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class Linkin
{
public static void main(String[] args)
{
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(1);//创建第二行 HSSFCell cell1 = row.createCell((short) 0);//2,1格
cell1.setCellValue(true);//写入true HSSFCell cell2 = row.createCell((short) 1);//2,2格
Calendar cal = Calendar.getInstance();//Calendar???
cell2.setCellValue(cal);//写入Calendar型对象cal HSSFCell cell3 = row.createCell((short) 2);//2,3格
Date date = new Date(); //日期型
cell3.setCellValue(date);//写入日期型 HSSFCell cell4 = row.createCell((short) 3);//2,4格
cell4.setCellValue(150);//写入150 HSSFCell cell5 = row.createCell((short) 4);//2.5格
cell5.setCellValue("hello");//写入hello HSSFRow row2 = sheet.createRow(2);//第三行 HSSFCell cell6 = row2.createCell((short) 0);//3,1格 FileOutputStream out = null;
try
{
out = new FileOutputStream("sample.xls");
workbook.write(out);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
out.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
} }
- POI获取单元格类值类型
在获取单元格值的时候,不同类型,使用的方法也不一样,所以获取之前,必须要知道类型。这一节就来介绍如何知道单元格里的值是何类型。
要获取单元格值的类型,使用「HSSFCell」类的「getCellType」方法。 注意:数值型和日期型都是「CELL_TYPE_NUMERIC
下面就是类型和定义值的一览表。
Cell type 定义值
值(int)
Blank CELL_TYPE_BLANK
3
Boolean CELL_TYPE_BOOLEAN
4
Error CELL_TYPE_ERROR
5
Formula CELL_TYPE_FORMULA
2
Numeric CELL_TYPE_NUMERIC
0
String
CELL_TYPE_STRING 1
package linkin; import java.io.FileInputStream;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class Linkin
{
public static void main(String[] args)
{
FileInputStream in = null;
HSSFWorkbook workbook = null; try
{
in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
workbook = new HSSFWorkbook(fs);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
} HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.getRow(1); HSSFCell cell = row.getCell((short) 0);
System.out.println("A:2=" + getType(cell.getCellType())); cell = row.getCell((short) 1);
System.out.println("B:2=" + getType(cell.getCellType())); cell = row.getCell((short) 2);
System.out.println("C:2=" + getType(cell.getCellType())); cell = row.getCell((short) 3);
System.out.println("D:2=" + getType(cell.getCellType())); cell = row.getCell((short) 4);
System.out.println("E:2=" + getType(cell.getCellType()));
} public static String getType(int type)
{
if (type == HSSFCell.CELL_TYPE_BLANK)
{
return "CELL_TYPE_BLANK";
}
else if (type == HSSFCell.CELL_TYPE_BOOLEAN)
{
return "CELL_TYPE_BOOLEAN";
}
else if (type == HSSFCell.CELL_TYPE_ERROR)
{
return "CELL_TYPE_ERROR";
}
else if (type == HSSFCell.CELL_TYPE_FORMULA)
{
return "CELL_TYPE_FORMULA";
}
else if (type == HSSFCell.CELL_TYPE_NUMERIC)
{
return "CELL_TYPE_NUMERIC";
}
else if (type == HSSFCell.CELL_TYPE_STRING)
{
return "CELL_TYPE_STRING";
}
else
{
return "Not defined";
}
} }
- 日期型检查
到底是数值型还是日期型,可以通过「org.apache.poi.hssf.usermodel.HSSFDateUtil」类的「isCellDateFormatted」方法来检证。
public static boolean isCellDateFormatted(HSSFCell cell)
因为这个方法是静态的,可以直接调用如下所示。
if (HSSFDateUtil.isCellDateFormatted(cell)){
/* 日期型 */
}
package linkin; import java.io.FileInputStream;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class Linkin
{
public static void main(String[] args)
{
FileInputStream in = null;
HSSFWorkbook workbook = null; try
{
in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
workbook = new HSSFWorkbook(fs);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
} HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.getRow(1); HSSFCell cell = row.getCell((short) 0);
System.out.println("A:2=" + getType(cell)); cell = row.getCell((short) 1);
System.out.println("B:2=" + getType(cell)); cell = row.getCell((short) 2);
System.out.println("C:2=" + getType(cell)); cell = row.getCell((short) 3);
System.out.println("D:2=" + getType(cell)); cell = row.getCell((short) 4);
System.out.println("E:2=" + getType(cell));
} public static String getType(HSSFCell cell)
{
int type = cell.getCellType(); if (type == HSSFCell.CELL_TYPE_BLANK)
{
return "CELL_TYPE_BLANK";
}
else if (type == HSSFCell.CELL_TYPE_BOOLEAN)
{
return "CELL_TYPE_BOOLEAN";
}
else if (type == HSSFCell.CELL_TYPE_ERROR)
{
return "CELL_TYPE_ERROR";
}
else if (type == HSSFCell.CELL_TYPE_FORMULA)
{
return "CELL_TYPE_FORMULA";
}
else if (type == HSSFCell.CELL_TYPE_NUMERIC)
{
//检查日期类型
if (HSSFDateUtil.isCellDateFormatted(cell))
{
return "CELL_TYPE_DATE";
}
else
{
return "CELL_TYPE_NUMERIC";
}
}
else if (type == HSSFCell.CELL_TYPE_STRING)
{
return "CELL_TYPE_STRING";
}
else
{
return "Not defined";
}
}
}
- POI获取单元格类的值
这一节介绍如何获取单元格的值。在POI里,对于不同类型的单元格的值,所调用的方法是不一样的。
型 函数名
boolean型 getBooleanCellValue()
java.util.Date型 getDateCellValue()
byte型 getErrorCellValue()
double型 getNumericCellValue()
java.lang.String型 getStringCellValue()
java.lang.String型 getCellFormula()
如果单元格里是String型的值,调用方法「getStringCellValue」,数值型的话,则调用「getNumericCellValue」。再一起来看看其它方法。
1,public boolean getBooleanCellValue()获取boolean型的値,调用「getBooleanCellValue」方法。如果调用这个方法来获取字符串,数值型的值的话,会发生Exception异常,如果对象单元格里不含值,则返回「false」。
2,public java.util.Date getDateCellValue()获取日期Date型时,调用「getDateCellValue」方法。 如果用这个方法来获取字符串时,会有Exception异常发生,如果对象单元格里不含值,则返回「null」。
3,public byte getErrorCellValue()单元格如果是Error值,比如#VALUE!等,这时可以使用「getErrorCellValue」方法。 字符串,数值型,布尔型的值用这个方法的话,会产生异常,而单元格里值为空时则返回「0」。
对于单元格的Error值类型,在POI里的「org.apache.poi.hssf.usermodel.HSSFErrorConstants」有定义列表如下:
常量名 错误代码
Excel里的Error值
public static final byte ERROR_DIV0 7
#DIV/0!
public static final byte ERROR_NA 42
#N/A
public static final byte ERROR_NAME 29
#NAME?
public static final byte ERROR_NULL 0
#NULL!
public static final byte ERROR_NUM 36
#NUM!
public static final byte ERROR_REF 23
#REF!
public static final byte ERROR_VALUE 15
#VALUE!
所以这里要注意了,Excel的ERROR.TYPE函数所返回的值,和POI所定义的是不一样的。
4,public double getNumericCellValue()读取数值型时,调用「getNumericCellValue」方法。 用这个方法来读取字符串类型时,会有Exception发生,如果单元格里值为空时则返回「0」。
5,public java.lang.String getStringCellValue()字符串类型取得时,使用「getStringCellValue」方法。 同样的,用这个方法来读取数值型时,也会有异常Exception发生。单元格值为空时,则返回空白。
6,public java.lang.String getCellFormula()读取单元格里的计算式时,使用「getCellFormula」方法。单元格里如果是计算式的话,则把计算式作为字符串来获取。关于具体内容,在最新文档里,竟然没有,不知道为什么。
package linkin; import java.io.FileInputStream;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class Linkin
{
public static void main(String[] args)
{
FileInputStream in = null;
HSSFWorkbook workbook = null; try
{
in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
workbook = new HSSFWorkbook(fs);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
} HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.getRow(1); HSSFCell cell = row.getCell((short) 0);
System.out.println(cell.getNumericCellValue()); cell = row.getCell((short) 1);
System.out.println(cell.getStringCellValue()); cell = row.getCell((short) 2);
System.out.println(cell.getBooleanCellValue()); cell = row.getCell((short) 3);
System.out.println(cell.getErrorCellValue()); cell = row.getCell((short) 4);
System.out.println(cell.getDateCellValue());
}
}
- POI获取行单元格相关信息
有时可能你想要知道行里面单元格的具体信息,比方说,该行实际上有多少单元格,最初的单元格在什么位置,最后的单元格又在哪里?用POI也可以实现。
要取得某一行实际存在的单元格的总数,使用「HSSFRow」类的「getPhysicalNumberOfCells」方法。
1,public int getPhysicalNumberOfCells()要想知道最初的单元格的位置,可以使用「HSSFRow」类的「getFirstCellNum」方法。
2,public short getFirstCellNum()你也可以使用「HSSFRow」类的「getLastCellNum」方法来获取最后的单元格的位置,但这里要注意一点,如果单元格存在,如下面的API文档所说,获取的值是实际列号再加上1,在以前的版本可不是这样的。
3,public short getLastCellNum()需要注意的是,POI在获取最初单元格位置和最后单元格位置时,返回的值并不是某一行特有的,而是针对所有的行。也就是说,上面的两个方法,针对所有的行,返回一个最小的列号和最大的列号。因此,不管对于哪一行,实行上面的两个方法,返回的值都是一样的。
package linkin; import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class Linkin
{
public static void main(String[] args)
{
HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(1); System.out.println("创建单元格前的状态:");
System.out.println("First:" + row.getFirstCellNum());
System.out.println("Last:" + row.getLastCellNum());
System.out.println("Total:" + row.getPhysicalNumberOfCells() + "\n"); row.createCell((short) 1); System.out.println("创建第二列(列号为1)单元格:");
System.out.println("First:" + row.getFirstCellNum());
System.out.println("Last:" + row.getLastCellNum());
System.out.println("Total:" + row.getPhysicalNumberOfCells() + "\n"); row.createCell((short) 3); System.out.println("创建第四列(列号为3)单元格:");
System.out.println("First:" + row.getFirstCellNum());
System.out.println("Last:" + row.getLastCellNum());
System.out.println("Total:" + row.getPhysicalNumberOfCells() + "\n");
}
}
一行当中没有单元格的情况下,调用「getFirstCellNum」方法和「getLastCellNum」方法,返回值都是「-1」。有单元格时,调用「getLastCellNum」方法,返回的值总是实际列号再加上1(实际第几列)。
- 从现有的Excel文件读取单元格信息
package linkin; import java.io.FileInputStream;
import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class Linkin
{
public static void main(String[] args)
{
FileInputStream in = null;
HSSFWorkbook workbook = null; try
{
in = new FileInputStream("sample.xls");
POIFSFileSystem fs = new POIFSFileSystem(in);
workbook = new HSSFWorkbook(fs);
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
try
{
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
} HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row = sheet.getRow(1); System.out.println("First:" + row.getFirstCellNum());
System.out.println("Last:" + row.getLastCellNum());
System.out.println("Total:" + row.getPhysicalNumberOfCells() + "\n"); row = sheet.getRow(2); System.out.println("First:" + row.getFirstCellNum());
System.out.println("Last:" + row.getLastCellNum());
System.out.println("Total:" + row.getPhysicalNumberOfCells() + "\n");
}
}
POI--HSSFCell类的更多相关文章
- JAVA poi 帮助类
pom.xml 添加引用: <!--poi--> <dependency> <groupId>org.apache.poi</groupId> < ...
- 关于Excel导入导出POI工具类
import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import ...
- poi 工具类
<!--POI--> <dependency> <groupId>org.apache.poi</groupId> <artifactId> ...
- Apache POI 工具类 [ PoiUtil ]
pom.xml <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml ...
- Java操作Excel工具类(poi)
分享一个自己做的poi工具类,写不是很完全,足够我自己当前使用,有兴趣的可以自行扩展 1 import org.apache.commons.lang3.exception.ExceptionUtil ...
- Apache POI使用详解
Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案 ...
- POI使用详解
Apache POI使用详解 1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案 ...
- 通过Excel认识POI
1.POI是什么 Apache POI - the Java API for Microsoft Documents,顾名思义,Apache的三方包,用来操作微软office文档的,多数时候用来操作e ...
- POI 的API大全二
1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发 ...
- 4.Apache POI使用详解
一.POI结构与常用类 1.POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能. .NET的开发人 ...
随机推荐
- [python]使用xlrd对Excel表格进行读写操作
2.1 导入模块 import xlrd 2.2 打开Excel文件读取数据 data = xlrd.open_workbook("excelFile.xls") 2.3 使用技巧 ...
- K:哈弗曼树
相关介绍: 树形结构除了应用于查找和排序等操作时能调高效率,它在信息通讯领域也有着广泛的应用.哈弗曼(Huffman)树就是一种在编码技术方面得到广泛应用的二叉树,它同时也是一种最优二叉树. 哈弗曼 ...
- VSCode好用的Python插件及配置
MS Python插件. 这是微软官方的Python插件,已经自带很多功能.下面是插件功能描述,其中部分内容我做了翻译. a) Linting (Prospector, Pylint, ...
- mysql foreign key(外键) 说明与实例
一,什么是foreign key,及其完整性 个人觉得,foreign key就是表与表之间的某种约定的关系,由于这种关系的存在,我们能够让表与表之间的数据,更加的完整,关连性更强.关于完整性,关连性 ...
- H5 调用手机摄像机、相册功能
<input type="file" accept="image/*" capture="camera"> <input ...
- [整理]k-vim-for-server通过vimrc修改vim格式
1.备份原来的vim设置: cp ~/.vimrc ~/.vimrc_bak 2. 下载配置到指定目录 法一: curl https://raw.githubusercontent.com/wklke ...
- Android基础_多媒体
一.MediaPlayer Android的MediaPlayer包含了Audio和video的播放功能,在Android的界面上,Music和Video两个应用程序都是调用MediaPlayer实现 ...
- Vijos P1114 FBI树【DFS模拟,二叉树入门】
描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串. FBI树是一种二叉树1,它的结点类型也包括F结点,B结点和I结点三种 ...
- [bzoj1999]树网的核
从下午坑到网上..noip的数据太弱,若干的地方写挂结果还随便过= = 最坑的就是网上有些题解没考虑周全... 第一步是找直径,用两次bfs(或者dfs,Linux下系统栈挺大的..)解决.找出其中一 ...
- POJ_1064 二分搜索
/*POJ 1064 *题目大意:有N条绳子,他们的长度分别为Li,如果从他们中切割K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后2位 *算法分析:这个问题用二分搜索可以非常容 ...