我正在尝试将String分成多个页面。该字符串包含一个故事(因此有点长),我需要将其加载到字符串的ArrayList中,它将显示为各种页面。
下面是我的代码中的方法,它接受长字符串并将其分解为页面并加载字符串的ArrayList。我的问题是这在Android 3.2中运行得相当快。但是在我的另一部4.3的手机中,它的加载非常慢(比如3.2秒内的2秒内工作需要大约10秒)。以下是我的代码。你们中的任何人都可以在代码中建议任何改进,这可以使它在新版本中更快地运行。不确定为什么新版本的处理速度比旧版本慢。
TextView contentTextView = (TextView)findViewById(R.id.textViewStory1);
String contentString;
TextPaint tp = contentTextView.getPaint();
String[] pages;
int totalPages=0;
ArrayList<String> pagesArray = new ArrayList<String>();
public void loadStory(String storyName){
//initialize variables
numCharsLine=0;
contentString = getStringFromTxtFile(storyName);
int linesInOnePage = getLinesInPage();//get how many lines will be displayed in one page
//load story into arraylist pagesArray
while (contentString != null && contentString.length() != 0)
{
totalPages ++;
int numChars = 0;
int lineCount = 0;
while ((lineCount < linesInOnePage) && (numChars < contentString.length())) {
numCharsLine = tp.breakText(contentString.substring(numChars), true, pageWidth, null);
numChars = numChars + numCharsLine;
lineCount ++;
}
// retrieve the String to be displayed in pagesArray
String toBeDisplayed = contentString.substring(0, numChars);
contentString = contentString.substring(numChars);
pagesArray.add(toBeDisplayed);
numChars = 0;
lineCount = 0;
}
//get the pagecount and reset pageNumber to current page
totalPages=pagesArray.size();
pages = new String[pagesArray.size()];
pages = pagesArray.toArray(pages);
}
下面是将文本文件的内容加载到字符串
中的方法 public String getStringFromTxtFile(String fileName) {
try {
InputStream is = getAssets().open(fileName+".txt");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
return new String(buffer);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
答案 0 :(得分:0)
现在你正在读取整个文件到字符串,然后将这个字符串拆分成行并处理它。
我建议你联合从文件中读取文本并逐行处理。
例如,使用类LineNumberReader或BufferedReader:
BufferedReader bis = new BufferedReader(new FileReader("my/file/path"));
String line;
while ((line = bis.readLine()) != null) {
processLine(line); //process current line
}
因此,您不必执行这么多的concat和子字符串操作。