我正在使用Tesseract Ocr 3.02为应用程序提供Web服务。
我想根据名片上获得的信息数量创建变量,然后根据字符串中的信息对它们进行分类。
例如:
电话。 + 496123456789 $ Mobil +49123456789$kai.kalsbach@gmail.com$www.google.com$Kai Kalsbach $ Muster Str 1a $ 40599Düsseldorf$“
然后这样:
-电话号码
-名
-姓氏
-电子邮件
-地址
那是我的第一个主意:
string endText1 = text.Split('$')[0];
string endText2 = text.Split('$')[1];
string endText3 = text.Split('$')[2];
string endText4 = text.Split('$')[3];
string endText5 = text.Split('$')[4];
string endText6 = text.Split('$')[5];
string endText7 = text.Split('$')[6];
string endText8 = text.Split('$')[7];
然后我将对变量进行分类。
但是在许多情况下,我会遇到以下异常,因为信息数量可能会因名片而异。
System.IndexOutOfRangeException:索引在数组c#的范围之外
答案 0 :(得分:0)
string[] Splitted = text.Split('$');
您提到您要根据拆分中吐出的元素数量做出决定
int Count = Splitted.Length;
switch(Count)
{ case 0: //DoStuff
break;
....
default:
break;
}
答案 1 :(得分:0)
对于您而言,最好使用以下内容:
string[] stringList = text.Split('$');
foreach(string val in stringList)
{
//your logic.
}
答案 2 :(得分:0)
您可以使用.Split方法将字符串拆分一次。 然后在foreach或for循环中运行它。我相信您的逻辑基于字符串的数量,因此您正在寻找“ for”循环。
string[] split = text.Split('$');
for (int i = 0; i < split.Length; i++)
{
var text = split[i];
// Your logic here...
switch (i) // for logic based on the index of the string
{
case 0:
// do something
break;
case 1:
// do something
break;
}
}
答案 3 :(得分:0)
抛出IndexOutOfRangeException
异常是因为代码试图访问7项数组中的第8项:
string endText8 = text.Split('$')[7];
.NET集合中的索引基于0,这意味着7表示第8个元素。
默认情况下,String.Split也将返回空字段。这意味着该字符串与此处发布的字符串不同,或者使用了StringSplitOptions.RemoveEmptyEntries
String.Split
返回可以存储在string[]
变量中的字符串数组。无需重复 String.Split
或使用多个变量:
var items = text.Split(new[]{'$'},StringSplitOptions.RemoveEmptyEntries);
从此数组创建类非常简单,您可能无需创建自定义解析器:
class Record
{
public string Telephone {get;set;}
...
}
var items = text.Split('$');
var record=new Record
{
Telephone=items[0],
Mobile=items[1],
...
};
答案 4 :(得分:0)
抛出IndexOutOfRangeException
异常是因为代码试图访问数组长度之外的项。
我的主张:我创建的formattedArray
总是包含8个项目,然后将拆分后的数组复制到此formattedArray
。这样一来,您再也没有IndexOutOfRangeException
了,因为text.Split('$')
中缺少的项目在formattedArray
中为空
var a = text.Split('$');
var formattedArray = new string[8];
Array.Copy(a, formattedArray, a.Length);
string endText1 = formattedArray [0];
string endText2 = formattedArray [1];
string endText3 = formattedArray [2];
string endText4 = formattedArray [3];
string endText5 = formattedArray [4];
string endText6 = formattedArray [5];
string endText7 = formattedArray [6];
string endText8 = formattedArray [7];
答案 5 :(得分:0)
另一种简便的方法是尝试,然后将创建所有变量,直到索引达到最大值。
string[] strArray = text.Split('$');
Try {
string endText1 = strArray[0];
string endText2 = strArray[1];
string endText3 = strArray[2];
string endText4 = strArray[3];
string endText5 = strArray[4];
string endText6 = strArray[5];
string endText7 = strArray[6];
string endText8 = strArray[7];
}
catch
{
//nothing
}
答案 6 :(得分:0)
创建工厂和识别器
<!DOCTYPE html>
<html>
<body>
<canvas id="myCanvas" width="263" height="442" style="border:1px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>
<script>
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
// Red rectangle
ctx.beginPath();
ctx.lineWidth = "6";
ctx.strokeStyle = "red";
ctx.rect(200, 400 , 40, 40);
ctx.stroke();
// Green rectangle
ctx.beginPath();
ctx.lineWidth = "4";
ctx.strokeStyle = "green";
ctx.rect(30, 30, 50, 50);
ctx.stroke();
// Blue rectangle
ctx.beginPath();
ctx.lineWidth = "10";
ctx.strokeStyle = "blue";
ctx.rect(50, 50, 150, 80);
ctx.stroke();
</script>
</body>
</html>
将字符串分割成段
public class PhoneItem : IItem
{
public PhoneItem(string text)
{
// some code
}
}
public interface IRecognizer
{
IItem Recognize(int index, string text);
}
public class PhoneRecognizer : IRecognizer
{
public IItem Recognize(int index, string text)
{
return index == 0 ? new PhoneItem(text) : null;
}
}
public class ItemFactory
{
private IEnumerable<IRecognizer> _recognizers = new []
{
new PhoneRecognizer(),
new FullNameRecognizer()
};
public IItem CreateItem(int index, string text)
{
foreach (var rec in _recognizers)
{
var item = rec.Recognize(index, text);
if (item != null)
{
return item;
}
}
throw new Exception("Item not recognized");
}
}
使用工厂创建对象
var parts = text.Split('$');