كيفية الحصول على البيانات بين الاقتباسات في جافا؟

StackOverflow https://stackoverflow.com/questions/1473155

  •  16-09-2019
  •  | 
  •  

سؤال

لدي هذه الأسطر من النص قد يتغير عدد علامات الاقتباس مثل:

Here just one "comillas"
But I also could have more "mas" values in "comillas" and that "is" the "trick"
I was thinking in a method that return "a" list of "words" that "are" between "comillas"

كيف يمكنني الحصول على البيانات بين الاقتباسات؟

يجب أن تكون النتيجة:

comillas.
ماس، comillas، خدعة
أ، كلمات، هي، comillas

هل كانت مفيدة؟

المحلول

يمكنك استخدام تعبير منتظم لاستكشاف هذا النوع من المعلومات.

Pattern p = Pattern.compile("\"([^\"]*)\"");
Matcher m = p.matcher(line);
while (m.find()) {
  System.out.println(m.group(1));
}

يفترض هذا المثال أن لغة الخط التي يجري تحليلها لا تدعم تسلسل الهروب من أجل علامات اقتباس مزدوجة داخل حرفية السلسلة، تحتوي على سلاسل تمتد إلى عدة خطوط "أو دعم المحددين الآخرين للحصول على سلاسل مثل اقتباس واحد.

نصائح أخرى

الدفع StringUtils في مكتبة Apache KORMONS-LANG - لديها substringsBetween طريقة.

String lineOfText = "if(getip(document.referrer)==\"www.eg.com\" || getip(document.referrer)==\"192.57.42.11\"";

String[] valuesInQuotes = StringUtils.substringsBetween(lineOfText , "\"", "\"");

assertThat(valuesInQuotes[0], is("www.eg.com"));
assertThat(valuesInQuotes[1], is("192.57.42.11"));
String line = "if(getip(document.referrer)==\"www.eg.com\" || getip(document.referrer)==\"192.57.42.11\"";
StringTokenizer stk = new StringTokenizer(line, "\"");
stk.nextToken();
String egStr = stk.nextToken();
stk.nextToken();
String ipStr = stk.nextToken();

أولا، يرجى ملاحظة أنه يجب عليك يساوي المستخدم () بدلا من ==. "==" يسأل افتراضيا عما إذا كانت نفس المثيل في الذاكرة، والتي في الأوتار يمكن أن تكون في بعض الأحيان هي الحالة. مع myString.Aquals ("...") أنت تقارن قيم السلاسل.

أما بالنسبة لكيفية الحصول على القيم بين علامات الاقتباس، فأنا لست متأكدا مما تعنيه. "..." هو كائن فعلي. بدلا من ذلك يمكنك القيام به:

string weburl = "www.eg.com"؛

إذا كنت تقوم بتحليل ملف مصدر بأكمله بدلا من سطر واحد فقط، فقد يكون المحلل المحلل بناء على قواعد الوظيفة خيارا أكثر أمانا من محاولة القيام بذلك بناء على سلاسل.

أنا أظن أن هذه ستكون حرفيا سلسلة في قواعد اللغة الخاصة بك.

إذا كنت ترغب في الحصول عليها جميع ocurrences من ملف:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class testReadQuotes {


    public static void main(String args[]) throws IOException{

        Pattern patt = Pattern.compile("\"([^\"]*)\"");
        BufferedReader r = new BufferedReader(new FileReader("src\\files\\myFile.txt"));

        String line;

        while ((line = r.readLine()) != null) {

          Matcher m = patt.matcher(line);

          while (m.find()) {
            System.out.println(m.group(0));
          }

        }

    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top