第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

(Java) 如何解析具有多種可能格式的坐標(biāo)字符串,并將它們轉(zhuǎn)換為整數(shù)?

(Java) 如何解析具有多種可能格式的坐標(biāo)字符串,并將它們轉(zhuǎn)換為整數(shù)?

胡說叔叔 2021-09-12 10:36:04
我有一個(gè)方法可以從用戶那里接收 (X,Y) 坐標(biāo)字符串。X 和 Y 坐標(biāo)的范圍都從 0 到 8,坐標(biāo)可以是五種可能的格式之一:(4,3) : 括號(hào)中的 X 和 Y 坐標(biāo),并以逗號(hào)分隔且無空格4 3 : X 和 Y 坐標(biāo)僅由空格分隔,無括號(hào)4,3 : X 和 Y 坐標(biāo)僅由逗號(hào)分隔,沒有括號(hào)d 3:用字母表示的X。0=A, 1=B, ..., 8=H。X 和 Y 由空格分隔d3 : 除了沒有空格外,同上。我遇到的問題是開發(fā)一種可以成功解析所有四種格式的方法。更具體地說,我想成功地將 X 和 Y 坐標(biāo)轉(zhuǎn)換為兩個(gè)單獨(dú)的整數(shù)并將它們存儲(chǔ)在某處,無論使用哪種格式。我對(duì)java有點(diǎn)陌生,并且沒有太多解析字符串的經(jīng)驗(yàn)。任何指針將不勝感激。
查看完整描述

3 回答

?
一只斗牛犬

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊

首先讓我們考慮一個(gè)主格式。我們想要將所有這些轉(zhuǎn)換為的格式,以便最終將它們轉(zhuǎn)換為兩個(gè)整數(shù)。讓我們將此格式設(shè)置為由空格分隔的兩個(gè)數(shù)字。這是 IMO 最容易解析的。


然后,讓我們考慮所有這些共享的模式。例如,第一個(gè)輸入保證只有一個(gè)括號(hào),所以我們可以很容易地識(shí)別出來。第三個(gè)保證包含逗號(hào),但沒有括號(hào)。因此,我們可以用規(guī)則將它們分組,如果它有逗號(hào),則刪除括號(hào)(如果有)并將逗號(hào)替換為空格。


這是三個(gè)下降,2個(gè)去。


現(xiàn)在,這最后兩個(gè)有什么共同點(diǎn)?他們共享一封信。我們可以使用正則表達(dá)式輕松捕獲這封信,但讓我們稍后再考慮。所以,讓我們制定一個(gè)邏輯規(guī)則。


如果短語沒有逗號(hào),我們檢查它是否有字母。如果是,我們檢查它是否有空格。如果是這樣,我們按空格分割,并用其整數(shù)等值替換字符,正確偏移以表示其在字母表中的位置。否則,我們使用正則表達(dá)式按字母拆分,并執(zhí)行上述操作。


現(xiàn)在我們對(duì)我們想要完成的事情有了一個(gè)清晰的印象,讓我們自己嘗試一下。


這就是我在代碼中的做法。


  public int[] parseXYCoord(String s) {

    String master=s;

    if(s.contains(",")){

        master=master.replace("(","").replace(")","");

        master=master.replace(","," ");

    }else if(master.matches("^[a-z]((\\s[0-8])|[0-8])$")){

        int charValue=master.charAt(0)-'a'+1;

        master=charValue+" "+master.charAt(master.contains(" ")?2:1);



    }

    return parseMaster(master);

}


private int[] parseMaster(String master) {

    if(!master.matches("^[0-8] [0-8]$"))

        throw new IllegalArgumentException("Inputted Number is incorrect!");

    String[] splitMaster=master.split(" ");

    return new int[]{Integer.parseInt(splitMaster[0]),Integer.parseInt(splitMaster[1])};


}

我不太擅長(zhǎng)正則表達(dá)式。雖然它很丑陋,但它確實(shí)完成了工作。如果您想學(xué)習(xí)如何使用正則表達(dá)式,請(qǐng)查看站點(diǎn)DebugRegex。


測(cè)試它使用


    System.out.println(Arrays.toString(parseXYCoord("4,3")));

    System.out.println(Arrays.toString(parseXYCoord("4 3")));

    System.out.println(Arrays.toString(parseXYCoord("(4,3)")));

    System.out.println(Arrays.toString(parseXYCoord("d3")));

    System.out.println(Arrays.toString(parseXYCoord("d 3")));

它打印


[4, 3]

[4, 3]

[4, 3]

[4, 3]

[4, 3]


查看完整回答
反對(duì) 回復(fù) 2021-09-12
?
慕尼黑8549860

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊

您可以按照以下步驟執(zhí)行此操作:

  • 刪除所有不是數(shù)字或字母的字符,您將以粘貼 2 個(gè)字符結(jié)尾

  • 看看這兩個(gè):

    • 如果數(shù)字:解析為 int

    • 如果不刪除字符代碼'a'并添加+1以獲得a=1, b=2, ...

private static int[] parseToCoord(String s) {

    String[] xy = s.replaceAll("[^\\w\\d]", "").toLowerCase().split("");

    int[] res = new int[2];

    res[0] = xy[0].matches("\\d") ? Integer.parseInt(xy[0]) : xy[0].charAt(0) - 'a' + 1;

    res[1] = xy[1].matches("\\d") ? Integer.parseInt(xy[1]) : xy[1].charAt(0) - 'a' + 1;

    return res;

}

該Stream版本是


private static int[] parseToCoordStream(String s) {

    return Stream.of(s.replaceAll("[^\\w\\d]", "").toLowerCase().split(""))

            .mapToInt(val -> val.matches("\\d") ? Integer.parseInt(val) : val.charAt(0) - 'a' + 1)

            .toArray();

}


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

    for (String s : Arrays.asList("(4,3)", "4 3", "4,3", "d 3", "d3", "D3")) {

        int[] xy = parseToCoord(s);

        System.out.println(xy[0] + " " + xy[1]);

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-09-12
?
喵喵時(shí)光機(jī)

TA貢獻(xiàn)1846條經(jīng)驗(yàn) 獲得超7個(gè)贊

這是如何實(shí)施解決方案的示例。輸入被驗(yàn)證并且程序拋出適當(dāng)?shù)漠惓!N艺J(rèn)為此代碼的某些或大部分方面可用于實(shí)現(xiàn)解決方案。


該程序從命令提示符運(yùn)行,如下所示,例如:


> java CoordinateParser "d 7"


該示例的代碼:


import java.util.*;


public class CoordinateParser {


    private static final Map<Character, Integer> charIntMap = new HashMap<>();

    static {

        charIntMap.put('a', 0);

        charIntMap.put('b', 1);

        charIntMap.put('c', 2);

        charIntMap.put('d', 3);

        charIntMap.put('e', 4);

        charIntMap.put('f', 5);

        charIntMap.put('g', 6);

        charIntMap.put('h', 7);

        charIntMap.put('i', 8);

    }


    public static void main (String [] args) {


        if (args.length != 1) {

            System.out.println("Program needs input string argument, for example:");

            System.out.println("java CoordinateParser \"d7\"");

            System.out.println("Exiting the program.");

            System.exit(0);

        }


        System.out.println("Input: " + args[0]);


        XYCoordinates xy = new CoordinateParser().getCoordinates(args[0]);

        System.out.println("Co-ordinates: " + xy);

    }


    private XYCoordinates getCoordinates(String input)

            throws NumberFormatException {


        input = input.trim();


        if (input.length() < 2 || input.length() > 5) {

            throw new IllegalArgumentException("Invalid input string length: " + input);

        }


        if (input.length() == 5 && input.startsWith("(") && input.endsWith(")")) {

            return new XYCoordinates(input.substring(1, 2), input.substring(3, 4));

        }


        if (input.length() == 3 && input.contains(",")) {

            return new XYCoordinates(input.substring(0, 1), input.substring(2, 3));

        }       


        if (input.length() == 3 && input.contains(" ")) {

            String x = input.substring(0, 1);

            Integer i = charIntMap.get(x.charAt(0));

            if (i != null) {

                return new XYCoordinates(Integer.toString(i), input.substring(2, 3));

            }

        }           


        if (input.length() == 2) {

            String x = input.substring(0, 1);

            Integer i = charIntMap.get(x.charAt(0));

            if (i != null) {

                return new XYCoordinates(Integer.toString(i), input.substring(1, 2));

            }

        }


        throw new IllegalArgumentException("Invalid input format: " + input);

    }


    /*

     * Inner class represents x and y co-ordinates.

     */

    private class XYCoordinates {


        private int x;

        private int y;


        XYCoordinates(String xStr, String yStr) 

                throws NumberFormatException {


            try {

                x = Integer.parseInt(xStr);

                y = Integer.parseInt(yStr);

            }

            catch (NumberFormatException ex) {

                throw new NumberFormatException("Invalid co-ordinates: " +

                    new StringJoiner(", ", "(", ")")

                        .add(xStr).add(yStr).toString());

            }


            if (isNotValidValue(x) || isNotValidValue(y)) {

                throw new IllegalArgumentException("Co-ordinates out of range: " + toString());

            }

        }


        private boolean isNotValidValue(int i) {

            return (i < 0 || i > 8);

        }


        int getX() {

            return x;

        }


        int getY() {

            return y;

        }


        @Override

        public String toString() {

            return new StringJoiner(", ", "(", ")")

                .add(Integer.toString(x))

                .add(Integer.toString(y))

                .toString();

        }

    }

}


XY坐標(biāo)類:

POJO(Plain Old Java Object)表示一個(gè)對(duì)象,在這種情況下,由類定義XYCoordinates(具有一組坐標(biāo)xy)。擁有 POJO 的優(yōu)點(diǎn)是:

  • 可以很容易地檢索單個(gè)坐標(biāo);例如, getX()getY()。

  • 獲取坐標(biāo)的字符串表示 - 通過覆蓋 toStringjava.lang.Object.

  • 通過覆蓋Object類的equals方法來比較兩個(gè)坐標(biāo)是否相同(或相等) (兩組具有相同x 和y值的坐標(biāo)可能被認(rèn)為是相等的)。

  • 將一些坐標(biāo)存儲(chǔ)在一個(gè)集合中并有效地檢索它們(覆蓋Object類的hashcode方法會(huì)有所幫助)。

這些是一些優(yōu)點(diǎn)。此外,還可以根據(jù)需要為 POJO 類定義其他屬性或行為;我想到了比較兩個(gè)坐標(biāo)和對(duì)一組坐標(biāo)進(jìn)行排序(記住ComparableComparator功能接口)。


查看完整回答
反對(duì) 回復(fù) 2021-09-12
  • 3 回答
  • 0 關(guān)注
  • 171 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)