scala Scala在字符串中查找字符串的位置

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/11402018/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-22 04:20:43  来源:igfitidea点击:

Scala find location of string in a string

stringscala

提问by user1491739

I have this string:

我有这个字符串:

var htmlString;

Assigned to:

分配给:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>Payment Receipt</title>
<link rel="stylesheet" type="text/css" href="content/PaymentForm.css">
<style type="text/css">
</style>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
</head>
<body>
<div id="divPageOuter" class="PageOuter">
    <div id="divPage" class="Page">
        <!--[1]-->
        <div id="divThankYou">
             Thank you for your order!
        </div>
        <hr class="HrTop">
        <div id="divReceiptMsg">
             You may print this receipt page for your records.
        </div>
        <div class="SectionBar">
             Order Information
        </div>
        <table id="tablePaymentDetails1Rcpt">
        <tr>
            <td class="LabelColInfo1R">
                 Merchant:
            </td>
            <td class="DataColInfo1R">
                <!--Merchant.val-->
                Ryan
                <!--end-->
            </td>
        </tr>
        <tr>
            <td class="LabelColInfo1R">
                 Description:
            </td>
            <td class="DataColInfo1R">
                <!--x_description.val-->
                Rasmussenpayment
                <!--end-->
            </td>
        </tr>
        </table>
        <table id="tablePaymentDetails2Rcpt" cellspacing="0" cellpadding="0">
        <tr>
            <td id="tdPaymentDetails2Rcpt1">
                <table>
                <tr>
                    <td class="LabelColInfo1R">
                         Date/Time:
                    </td>
                    <td class="DataColInfo1R">
                        <!--Date/Time.val-->
                        09-Jul-2012 12:26:46 PM PT
                        <!--end-->
                    </td>
                </tr>
                <tr>
                    <td class="LabelColInfo1R">
                         Customer ID:
                    </td>
                    <td class="DataColInfo1R">
                        <!--x_cust_id.val-->
                        <!--end-->
                    </td>
                </tr>
                </table>
            </td>
            <td id="tdPaymentDetails2Rcpt2">
                <table>
                <tr>
                    <td class="LabelColInfo1R">
                         Invoice Number:
                    </td>
                    <td class="DataColInfo1R">
                        <!--x_invoice_num.val-->
                        176966244
                        <!--end-->
                    </td>
                </tr>
                </table>
            </td>
        </tr>
        </table>
        <hr id="hrBillingShippingBefore">
        <table id="tableBillingShipping">
        <tr>
            <td id="tdBillingInformation">
                <div class="Label">
                     Billing Information
                </div>
                <div id="divBillingInformation">
                     Test14 Rasmussen<br>
                    1234 test st<br>
                    San Diego, CA 92107 <br>
                </div>
            </td>
            <td id="tdShippingInformation">
                <div class="Label">
                     Shipping Information
                </div>
                <div id="divShippingInformation">
                </div>
            </td>
        </tr>
        </table>
        <hr id="hrBillingShippingAfter">
        <div id="divOrderDetailsBottomR">
            <table id="tableOrderDetailsBottom">
            <tr>
                <td class="LabelColTotal">
                     Total:
                </td>
                <td class="DescrColTotal">
                     &nbsp;
                </td>
                <td class="DataColTotal">
                    <!--x_amount.val-->
                    US&nbsp;0.00
                    <!--end-->
                </td>
            </tr>
            </table>
            <!-- tableOrderDetailsBottom -->
        </div>
        <div id="divOrderDetailsBottomSpacerR">
        </div>
        <div class="SectionBar">
             Visa ****0027
        </div>
        <table class="PaymentSectionTable" cellspacing="0" cellpadding="0">
        <tr>
            <td class="PaymentSection1">
                <table>
                <tr>
                    <td class="LabelColInfo2R">
                         Date/Time:
                    </td>
                    <td class="DataColInfo2R">
                        <!--Date/Time.1.val-->
                        09-Jul-2012 12:26:46 PM PT
                        <!--end-->
                    </td>
                </tr>
                <tr>
                    <td class="LabelColInfo2R">
                         Transaction ID:
                    </td>
                    <td class="DataColInfo2R">
                        <!--Transaction ID.1.val-->
                        2173493354
                        <!--end-->
                    </td>
                </tr>
                <tr>
                    <td class="LabelColInfo2R">
                        Authorization Code:
                    </td>
                    <td class="DataColInfo2R">
                        <!--x_auth_code.1.val-->
                        07I3DH
                        <!--end-->
                    </td>
                </tr>
                <tr>
                    <td class="LabelColInfo2R">
                         Payment Method:
                    </td>
                    <td class="DataColInfo2R">
                        <!--x_method.1.val-->
                        Visa ****0027
                        <!--end-->
                    </td>
                </tr>
                </table>
            </td>
            <td class="PaymentSection2">
                <table>
                </table>
            </td>
        </tr>
        </table>
        <div class="PaymentSectionSpacer">
        </div>
    </div>
    <!-- entire BODY -->
</div>
<div class="PageAfter">
</div>
</body>
</html>

And I want to find the location of "x_auth_code.1.val"in the string. And then I want to obtain a string from the location plus a certain number of characters. The goal would be to return the Authorization code.

我想找到"x_auth_code.1.val"字符串中的位置。然后我想从该位置获取一个字符串加上一定数量的字符。目标是返回授权代码。

回答by Christopher Chiche

You can use indexOfSlice, and then slice()in StringOps

您可以使用indexOfSlice, 然后slice()StringOps 中

scala> val myString = "Hello World!"
myString: java.lang.String = Hello World!

scala> val index = myString.indexOfSlice("Wo")
index: Int = 6

scala> val slice = myString.slice(index, index+5)
slice: String = World

With your html string:

使用您的 html 字符串:

scala> htmlString.indexOfSlice("x_auth_code.1.val")
res4: Int = 2771

回答by Daniel C. Sobral

Why aren't you using an XML parser? Don't treat XML as strings -- you'll get bitten if you do.

为什么不使用 XML 解析器?不要将 XML 视为字符串 —— 如果你这样做,你会被咬的。

Here's a regex to do it, but my advice is: DO NOT USE IT! Use xml tools.

这是一个正则表达式,但我的建议是:不要使用它!使用 xml 工具。

"""\Qx_auth_code.1.val\E[^>]*>([^<]*)""".r.findFirstMatchIn(htmlString).map(_ group 1)