2014-01-18 92 views
3

有沒有一種方法可以讓我根據regEx模式格式化字符串。這是我可以有一個字符串,並應用該模式。一個完美的例子是電話號碼或信用卡。舉例來說,如果我有這樣的功能:基於模式的Java字符串格式化

public String formatNumber(String input, String patter) { 

    // What to do... 

} 

我想描述的,而不是做多的字符串操作來獲得輸入所需格式的單個字符串的模式。

不是說輸入可能不是整個輸入,而只是輸入的一部分,它仍然需要格式化。

EXAMPLE: 
------- 

Pattern = "\(\d{3}\) \d{3}-\d{4}" 

123456  => (123) 456 
1234567 => (123) 456-7 
1234567890 => (123) 456-7890 
12   => (12 
+0

不知道[這有助於(http://stackoverflow.com/questions/8196771/format-a-string-using-regex-in-java) – gtgaxiola

+0

可能值得RegEx在這個問題的答案:http://stackoverflow.com/questions/8196771/format-a-string-using-regex-in-java – Durandal

+0

看着這個,但沒有完全關注。我將添加添加標準。 – jjNford

回答

0

這是我能爲你做

public class HelloWorld{ 

public static void main(String []args){ 
    String input = "1234567890"; 
    String patter = "(%s) %s-%s"; 
    HelloWorld hello = new HelloWorld(); 
    hello.formatNumber(input,patter); 
} 
public String formatNumber(String input, String patter) { 
    System.out.println(input); 
    System.out.println(patter); 
    System.out.println(String.format(patter,input.substring(0,3),input.substring(3,6),input.substring(6,10))); 
    return null; 
} 
} 

您可以根據自己的需要修改它

1

好了,這個怎麼樣的解決方案:

給予信貸@code騎師在this post,你可以使用這個正則表達式來匹配和格式化有效的電話號碼。

這個正則表達式有許多變化,它非常全面而且非常靈活。請參閱示例鏈接。非常聰明。

正則表達式:

^\D*1?\D*([2-9])\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d)\D*(\d).*$ 

替換:

($1$2$3) $4$5$6-$7$8$9$10 

例子:

http://regex101.com/r/wM0nU5

那麼,如果比賽是假的,(不是一個有效的電話號碼),如您例如:

123456 
1234567 
1234567890 
12 

你會使用另一個正則表達式,來匹配和格式化殘疾人 - 如:

(.{1,3})(.{1,3})(.{1,3}) 

替換:

($1) $2-$3 

例子:

http://regex101.com/r/wY3kP2

個人筆記:我不知道你爲什麼想要匹配和形成在無效電話號碼。我個人會使用第一個正則表達式格式有效的號碼,然後在錯誤的匹配,請求用戶輸入一個有效的號碼。但是,我明白,在不知道具體情況或應用程序的情況下,可能需要或例外地格式化無效的電話號碼。

0

你不需要應用正則表達式,你可以過濾掉輸入。

我創建了一個示例應用程序,我希望它會有幫助!

MainActivity.java

package com.mehuljoisar.d_asyoutypeformatter; 

import android.os.Bundle; 
import android.app.Activity; 
import android.text.InputFilter; 
import android.text.Spanned; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.EditText; 

public class MainActivity extends Activity { 

    private EditText etCellNumber; 

    private InputFilter mCellNumFilter = new InputFilter() { 

     @Override 
     public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { 

      Log.d("dstart", ""+dstart); 
      if (source.length() > 0) { 

       if (!Character.isDigit(source.charAt(0))) 
        return ""; 
       else { 
        if (dstart == 0) { 
         return "(" + source; 
        } 
        else if (dstart == 3) { 
         return source + ") "; 
        } 
        else if (dstart == 9) 
         return "-" + source; 
        else if (dstart >= 14) 
         return ""; 
       } 

      } else { 

      } 

      return null; 

     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     etCellNumber = (EditText)findViewById(R.id.etCellNumber); 
     etCellNumber.setFilters(new InputFilter[] { mCellNumFilter }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 


<EditText 
    android:id="@+id/etCellNumber" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="phone" 
    android:hint="enter cell number" /> 

截圖:

enter image description here enter image description here enter image description here enter image description here

+0

它是否適用於具有'1'的數字,例如1(800)234-3345?只是好奇。懶散就像一個很酷的應用程序。 :) – MElliott

+1

我認爲這正是jjNford試圖避免的東西 –

+1

@MElliott:它不會像那樣工作,所以它是完美的一段代碼。因爲我已經根據他提到的要求實現了'filter''「 \(\ d {3} \)\ d {3} - \ d {4}「'。 –