Хотя ответ на разметку всех пробелов является опрятным, на самом деле он не решает поставленную задачу, которая заключается в том, чтобы найти регулярное выражение. Возьмем, например, мой тестовый скрипт, который загружает веб-страницу и извлекает все номера телефонов с помощью регулярного выражения. Поскольку в любом случае вам понадобится регулярное выражение, вы также можете заставить регулярное выражение выполнить всю работу. Я придумал это:
1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?
Вот скрипт perl для его проверки. Когда вы сопоставляете, $ 1 содержит код области, $ 2 и $ 3 содержат номер телефона, а $ 5 содержит расширение. Мой тестовый скрипт загружает файл из Интернета и печатает в нем все номера телефонов.
#!/usr/bin/perl
my $us_phone_regex =
'1?\W*([2-9][0-8][0-9])\W*([2-9][0-9]{2})\W*([0-9]{4})(\se?x?t?(\d*))?';
my @tests =
(
"1-234-567-8901",
"1-234-567-8901 x1234",
"1-234-567-8901 ext1234",
"1 (234) 567-8901",
"1.234.567.8901",
"1/234/567/8901",
"12345678901",
"not a phone number"
);
foreach my $num (@tests)
{
if( $num =~ m/$us_phone_regex/ )
{
print "match [$1-$2-$3]\n" if not defined $4;
print "match [$1-$2-$3 $5]\n" if defined $4;
}
else
{
print "no match [$num]\n";
}
}
#
# Extract all phone numbers from an arbitrary file.
#
my $external_filename =
'http://web.textfiles.com/ezines/PHREAKSANDGEEKS/PnG-spring05.txt';
my @external_file = `curl $external_filename`;
foreach my $line (@external_file)
{
if( $line =~ m/$us_phone_regex/ )
{
print "match $1 $2 $3\n";
}
}
Изменить:
Вы можете изменить \ W * на \ s * \ W? \ s * в регулярном выражении, чтобы немного подтянуть его. Я не думал о регулярном выражении с точки зрения, скажем, проверки ввода пользователя в форме, когда я его написал, но это изменение позволяет использовать регулярное выражение для этой цели.
'1?\s*\W?\s*([2-9][0-8][0-9])\s*\W?\s*([2-9][0-9]{2})\s*\W?\s*([0-9]{4})(\se?x?t?(\d*))?';
Взгляните на пример MultipleImages , и вы обнаружите, что в вашем коде есть две ошибки:
Взгляните на мой код:
public void createPdf(String dest) throws IOException, DocumentException {
Image img = Image.getInstance(IMAGES[0]);
Document document = new Document(img);
PdfWriter.getInstance(document, new FileOutputStream(dest));
document.open();
for (String image : IMAGES) {
img = Image.getInstance(image);
document.setPageSize(img);
document.newPage();
img.setAbsolutePosition(0, 0);
document.add(img);
}
document.close();
}
Создаю экземпляр Document
, используя размер первого образ. Затем я перебираю массив изображений, устанавливая размер страницы следующей страницы на размер каждого изображения до . Я запускаю newPage()
[*]. Затем я добавляю изображение в координату 0, 0, потому что теперь размер изображения будет соответствовать размеру каждой страницы.
[*] Метод newPage()
имеет эффект только в том случае, если что-то добавлено к текущему стр. Когда вы впервые проходите цикл, ничего еще не добавлено, поэтому ничего не происходит. Вот почему вам нужно установить размер страницы в размере первого изображения при создании экземпляра Document
.
Android имеет функцию «PdfDocument», чтобы достичь этого,
class Main2Activity : AppCompatActivity() {
private var imgFiles: Array<File?>? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
imgFiles= arrayOfNulls(2)
imgFiles!![0] = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/doc1.png")
imgFiles!![1] = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/doc3.png")
val file = getOutputFile(File(Environment.getExternalStorageDirectory().absolutePath)
, "/output.pdf")
val fOut = FileOutputStream(file)
val document = PdfDocument()
var i = 0
imgFiles?.forEach {
i++
val bitmap = BitmapFactory.decodeFile(it?.path)
val pageInfo = PdfDocument.PageInfo.Builder(bitmap.width, bitmap.height, i).create()
val page = document.startPage(pageInfo)
val canvas = page?.canvas
val paint = Paint()
canvas?.drawPaint(paint)
paint.color = Color.BLUE;
canvas?.drawBitmap(bitmap, 0f, 0f, null)
document.finishPage(page)
bitmap.recycle()
}
document.writeTo(fOut)
document.close()
}
private fun getOutputFile(path: File, fileName: String): File? {
if (!path.exists()) {
path.mkdirs()
}
val file = File(path, fileName)
try {
if (file.exists()) {
file.delete()
}
file.createNewFile()
} catch (e: Exception) {
e.printStackTrace()
}
return file
}
}
, наконец, разрешить разрешение на хранение в манифесте, это должно работать