diff --git a/core/src/com/google/zxing/client/result/VCardResultParser.java b/core/src/com/google/zxing/client/result/VCardResultParser.java index a11f36ae2..d1c0201d3 100644 --- a/core/src/com/google/zxing/client/result/VCardResultParser.java +++ b/core/src/com/google/zxing/client/result/VCardResultParser.java @@ -59,7 +59,7 @@ public final class VCardResultParser extends ResultParser { List> names = matchVCardPrefixedField("FN", rawText, true, false); if (names == null) { // If no display names found, look for regular name fields and format them - names = matchVCardPrefixedField("N", rawText, true, true); + names = matchVCardPrefixedField("N", rawText, true, false); formatNames(names); } List nicknameString = matchSingleVCardPrefixedField("NICKNAME", rawText, true, false); @@ -328,7 +328,7 @@ public final class VCardResultParser extends ResultParser { int start = 0; int end; int componentIndex = 0; - while (componentIndex < components.length - 1 && (end = name.indexOf(';', start)) > 0) { + while (componentIndex < components.length - 1 && (end = name.indexOf(';', start)) >= 0) { components[componentIndex] = name.substring(start, end); componentIndex++; start = end + 1; @@ -346,8 +346,10 @@ public final class VCardResultParser extends ResultParser { } private static void maybeAppendComponent(String[] components, int i, StringBuilder newName) { - if (components[i] != null) { - newName.append(' '); + if (components[i] != null && !components[i].isEmpty()) { + if (newName.length() > 0) { + newName.append(' '); + } newName.append(components[i]); } } diff --git a/core/test/src/com/google/zxing/client/result/AddressBookParsedResultTestCase.java b/core/test/src/com/google/zxing/client/result/AddressBookParsedResultTestCase.java index afa84a9ea..a270eebf4 100644 --- a/core/test/src/com/google/zxing/client/result/AddressBookParsedResultTestCase.java +++ b/core/test/src/com/google/zxing/client/result/AddressBookParsedResultTestCase.java @@ -48,6 +48,24 @@ public final class AddressBookParsedResultTestCase extends Assert { null, new String[] {"Sean Owen"}, null, new String[] {"123 Main St"}, null, null, null, null, null, null); } + @Test + public void testVCardFullN() { + doTest("BEGIN:VCARD\r\nVERSION:2.1\r\nN:Owen;Sean;T;Mr.;Esq.\r\nEND:VCARD", + null, new String[] {"Mr. Sean T Owen Esq."}, null, null, null, null, null, null, null, null); + } + + @Test + public void testVCardFullN2() { + doTest("BEGIN:VCARD\r\nVERSION:2.1\r\nN:Owen;Sean;;;\r\nEND:VCARD", + null, new String[] {"Sean Owen"}, null, null, null, null, null, null, null, null); + } + + @Test + public void testVCardFullN3() { + doTest("BEGIN:VCARD\r\nVERSION:2.1\r\nN:;Sean;;;\r\nEND:VCARD", + null, new String[] {"Sean"}, null, null, null, null, null, null, null, null); + } + @Test public void testVCardCaseInsensitive() { doTest("begin:vcard\r\nadr;HOME:123 Main St\r\nVersion:2.1\r\nn:Owen;Sean\r\nEND:VCARD",