创建stringbuilder(创建文明城市的内容怎么写)
java创建pdf文件写入不进去
通常需要用到用于读、写、编辑PDF文件的库,你可以参考下面采用spire.pdf.jar来创建PDF的步骤及方法:
首先需要引入jar包。具体的引入方法可以自行百度搜索。
创建PdfDocument类的对象,并通过PdfDocument.getPages().add()方法添加页码。
定义标题文字。
创建PdfSolidBrush?画刷、PdfTrueTypeFont?字体、PdfStringFormat字符串、Rectangle2D等对象,用于指定字符串绘制效果、字体、格式、绘制区域等。
通过PdfPageBase.getCanvas().drawString(body, font2, brush2, rect, format2)方法将内容绘制到PDF页面。
下面附上详细的代码demo示例:
import com.spire.pdf.*;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.*;
import java.io.*;
public class CreatePdfDocumentInJava {
public static void main(String[] args) throws FileNotFoundException, IOException {
//创建PdfDocument对象
PdfDocument doc = new PdfDocument();
//添加一页
PdfPageBase page = doc.getPages().add();
//标题文字
String title = "Java基础语法";
//创建单色画刷对象
PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));
PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.BLACK));
//创建TrueType字体对象
PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("宋体", Font.PLAIN, 14), true);
PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("宋体", Font.PLAIN, 10), true);
//创建PdfStringFormat对象
PdfStringFormat format1 = new PdfStringFormat();
format1.setAlignment(PdfTextAlignment.Center);//设置文字居中
//使用drawString方法绘制标题文字
page.getCanvas().drawString(title, font1, brush1, new Point2D.Float((float) page.getActualBounds(true).getWidth() / 2, 0), format1);
//从txt文件读取内容到字符串
String body = readFileToString("C:\\Users\\Administrator\\Desktop\\bodyText.txt");
//创建PdfStringFormat对象
PdfStringFormat format2 = new PdfStringFormat();
format2.setParagraphIndent(20);//设置段首缩进
//创建Rectangle2D对象
Rectangle2D.Float rect = new Rectangle2D.Float(0, 30, (float) page.getActualBounds(true).getWidth(), (float) page.getActualBounds(true).getHeight());
//使用drawString方法在矩形区域绘制主体文字
page.getCanvas().drawString(body, font2, brush2, rect, format2);
//保存到PDF文档
doc.saveToFile("ouput.pdf");
}
//自定义方法读取txt文件内容到字符串
private static String readFileToString(String filepath) throws FileNotFoundException, IOException {
StringBuilder sb = new StringBuilder();
String s = "";
BufferedReader br = new BufferedReader(new FileReader(filepath));
while ((s = br.readLine()) != null) {
sb.append(s + "\n");
}
br.close();
String str = sb.toString();
return str;
}
}
StringBuiler sb = new StringBuilder("hello");会不会在字符串常量池里创建“hello”对象?
会的。但是你的结论太草率了。StringBuilder 另外会创建一个可变长度的对象来供操作。
例如:
String str = "abc" + "hello" + “world”;
考考你,总共有几个字符串对象?
答案是有 5 个。每一个 + 都会产生一个字符串,因此如果你不用 StringBuilder 则每多一个 + 就会多产生 2 个字符串。
而如果你写成:
StringBuilder strb = new StringBuilder("abc");
strb.append("hello");
strb.append("world");
这里只有 3 个字符串常量和一个 StringBuffer 对象。每多 append 一个新的字符串,最多多出一个对象来。
因此你可以看到差别。如果连接的字符串数量越多,StringBuilder 的好处越明显。
---------------------------------------------
PS:连接 100 个字符串常量,是会产生 100 个字符串常量和一个 StringBuffer 对象。你用 + 的话,算算看要 199 个字符串常量。差得远了。
创建一个C#控制台应用程序,输入一个整数,将这个数反过来输出。如:输入12345,输出54321。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace test
{
class Program
{ //试试我写的代码,就几行
static void Main(string[] args)
{
Console.WriteLine("please input a string");
string readLine = Console.ReadLine(); //从控制台获取字符并存入到readLine中
StringBuilder resultLine = new StringBuilder(""); //创建StringBuilder对象以保存修改的数据
for (int i = readLine.Length-1; i =0 ; i--) //此处开始的索引值为readLine.Length-1
{
resultLine.Append(readLine.Substring(i,1)) ; //将截取的子字符串追加到resultLine中
}
Console.WriteLine("the result :"+resultLine); //打印输出
Console.ReadLine();
}
}
}
我记得C#里面内置有个倒序排列的方法 你可以去帮助文档上查找一下
Java中请问一共创建了多少个对象?(与StringBuffer有关)
我觉得应该是3个对象。主要分成两个阶段创建,在编译期生成两个常量字符串对象,放在字符串池中,它们是abc
和
567。然后在运行期创建一个StringBuffer对象,放在堆中。所以一共创建3个对象,两个常量字符串对象,一个StringBuffer对象。