From 7a1ad0fac084b0e63472495c5647658b24fb432e Mon Sep 17 00:00:00 2001 From: Andreas Schildbach Date: Tue, 30 Jun 2020 15:49:35 +0200 Subject: [PATCH] HDPath: Use Splitter in parsePath(). --- .../src/main/java/org/bitcoinj/crypto/HDPath.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/crypto/HDPath.java b/core/src/main/java/org/bitcoinj/crypto/HDPath.java index 68b2a4a87..a9dce0ff9 100644 --- a/core/src/main/java/org/bitcoinj/crypto/HDPath.java +++ b/core/src/main/java/org/bitcoinj/crypto/HDPath.java @@ -16,11 +16,14 @@ package org.bitcoinj.crypto; +import com.google.common.base.Splitter; + import javax.annotation.Nonnull; import java.util.AbstractList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; +import java.util.LinkedList; import java.util.List; /** @@ -42,6 +45,7 @@ public class HDPath extends AbstractList { private static final char PREFIX_PRIVATE = 'm'; private static final char PREFIX_PUBLIC = 'M'; private static final char SEPARATOR = '/'; + private static final Splitter SEPARATOR_SPLITTER = Splitter.on(SEPARATOR).trimResults(); protected final boolean hasPrivateKey; protected final List unmodifiableList; @@ -151,14 +155,15 @@ public class HDPath extends AbstractList { * Where a letter "H" means hardened key. Spaces are ignored. */ public static HDPath parsePath(@Nonnull String path) { - String[] parsedNodes = path.replace("M", "").split("/"); - List nodes = new ArrayList<>(); + List parsedNodes = new LinkedList<>(SEPARATOR_SPLITTER.splitToList(path)); + if (!parsedNodes.isEmpty() && parsedNodes.get(0).equals(Character.toString(PREFIX_PUBLIC))) + parsedNodes.remove(0); + List nodes = new ArrayList<>(parsedNodes.size()); for (String n : parsedNodes) { - n = n.replaceAll(" ", ""); - if (n.length() == 0) continue; + if (n.isEmpty()) continue; boolean isHard = n.endsWith("H"); - if (isHard) n = n.substring(0, n.length() - 1); + if (isHard) n = n.substring(0, n.length() - 1).trim(); int nodeNumber = Integer.parseInt(n); nodes.add(new ChildNumber(nodeNumber, isHard)); }